При сравнении двух коллекций - не видятся одинаковые файлы и очередь переполняется дублями имеющихся - C#

Узнай цену своей работы

Формулировка задачи:

Здравствуйте! Есть проблема. Может кто подскажет более правильное решение. Есть папка куда копируются файлы с разными временными интервалами и разным кол-вом, потом они будут оттуда перенесены в другое место. Нужно следить за ней и выстраивать очередь из имеющихся файлов для будущего переноса. FileSystemWatcher не хочется использовать, используется простой таймер (допустим 10 секунд) Проблема в том, что при сравнении двух коллекций - не видятся одинаковые файлы и очередь переполняется дублями имеющихся.
private List<FilesList> _FilesList = new List<FilesList>();//создание списка файлов(единой очереди) исходящей папки
private List<FilesList> _FilesListTemp = new List<FilesList>();//создание "временного" списка файлов(единой очереди) исходящей папки
 
public void Start()
        {            
            createTimers();// создание таймеров
            
            Console.WriteLine("Запускаем таймер!...  " + DateTime.Now.TimeOfDay);
            
            FilesfillQueue.Enabled = true;
            FilesfillQueue.Start();
            
            while (true)// консольный вариант, чтобы программа на выходила
            {
 
            }
        }

private void FilesInFolder()//метод запускается каждые 10 секунд
        {
            foreach (var item in getFiles())
            {
                var fi = new FilesList(item, false);
                _FilesListTemp.Add(fi);
            }
 
            IEnumerable<FilesList> listTemp = _FilesListTemp;
            IEnumerable<FilesList> listMain = _FilesList;
            
                var queryList1Only = listTemp.Except(listMain);
                foreach (var item in queryList1Only)
                {
                    _FilesList.Add(item);
                }            
            
            _FilesListTemp.Clear();
            queryList1Only =null;
            
        }
 
private FileInfo[] getFiles()
        {
            DirectoryInfo dirFrom = new DirectoryInfo(pathIn);//получаем данные о нужной директрории
            FileInfo[] fileInf = dirFrom.GetFiles("*.*");//получаем список всех файлов в заданном каталоге *.*
            return fileInf;
        }
первый раз

_FilesList

пустой, я его заполняю из

_FilesListTemp

при втором запуске метода

_FilesList

уже содержит некие файлы, в

_FilesListTemp

опять заполняется теми же файлами, и после этого (когда в обоих списках одинаковые файлы) - из

queryList1Only

опять переносятся те же файлы и происходить дублирование. В чем ошибка никак не пойму. Спасибо.

Решение задачи: «При сравнении двух коллекций - не видятся одинаковые файлы и очередь переполняется дублями имеющихся»

textual
Листинг программы
class FilesListEqualityComparer : IEqualityComparer<FilesList>
{
    public bool Equals(FilesList fl1, FilesList fl2)
    {
        return fl1.File.FullName == fl2.File.FullName;
    }
 
    public int GetHashCode(FilesList fl)
    {
        return fl.File.FullName.GetHashCode();
    }
}
 
private void FilesInFolder()
{
    foreach (var item in getFiles())
    {
        var fi = new FilesList(item, false);
        _FilesListTemp.Add(fi);
    }
 
    IEnumerable<FilesList> listTemp = _FilesListTemp;
    IEnumerable<FilesList> listMain = _FilesList;
 
    var queryList1Only = listTemp.Except(listMain, new FilesListEqualityComparer());
    foreach (var item in queryList1Only)
    {
        _FilesList.Add(item);
    }            
 
    _FilesListTemp.Clear();
    queryList1Only =null;
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 3.5 из 5
Похожие ответы