При сравнении двух коллекций - не видятся одинаковые файлы и очередь переполняется дублями имеющихся - 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; }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д