У меня есть папка, из которой я перемещаю пары связанных файлов (xml в паре с pdf).Дополнительные файлы могут быть помещены в эту папку в любое время, но утилита запускается каждые 10 минут или около того.Мы могли бы использовать класс FileSystemWatcher, но по внутренним причинам мы не используем эту утилиту.
Я использую класс System.IO.FileInfo для чтения всех файлов в папке (будут только xml и pdf) во время каждого пробега.Получив файлы в объекте FileInfo, я перебираю файлы, перемещая совпадения в рабочую папку.Как только это будет сделано, я хочу переместить все файлы, которые не были связаны, но находятся в объекте FileInfo, в папку с ошибками.
Поскольку я не могу удалить элементы из объекта FileInfo (или ячто-то упускаю), было бы проще (1) использовать массив строк из класса Directory .GetFiles, (2) создать словарь из объекта FileInfo и удалить значения из него во время итерации, или (3) есть более элегантныйподход с использованием LINQ или что-то еще?
Вот код на данный момент:
internal static bool CompareXMLandPDFFileNames(FileInfo[] xmlFiles, FileInfo[] pdfFiles, string xmlFilePath)
{
string workingFilePath = xmlFilePath + @"\WORKING";
if (xmlFiles.Length > 0)
{
foreach (var xmlFile in xmlFiles)
{
string xfn = xmlFile.Name; //xml file name
string pdfName = xfn.Substring(0,xfn.IndexOf('_')) + ".pdf"; //parsed pdf file name contained in xml file name
foreach (var pdfFile in pdfFiles)
{
string pfn = pdfFile.Name; //pdf file name
if (pfn == pdfName)
{
//move xml and pdf files to working folder...
FileInfo xmlInfo = new FileInfo(xmlFilePath + xfn);
FileInfo pdfInfo = new FileInfo(xmlFilePath + pfn);
if (!File.Exists(workingFilePath + xfn))
{
xmlInfo.MoveTo(workingFilePath + xfn);
}
if (!File.Exists(workingFilePath + pfn))
{
pdfInfo.MoveTo(workingFilePath + pfn);
}
}
}
}
//all files in the file objects should now be moved to working folder, if not, fix orphans...
}
return true;
}