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