2014-10-14 4 views
0

У меня есть этот метод, который получает IEnumerable of Strings, которые в основном представляют собой список файлов (PDF), а затем внутри метода я получаю массив String и заполняю его файлами из другого места (TIFF), основная идея этого метода состоит в том, чтобы сопоставить все файлы из полученного списка с файлом внутри другого списка, который я заполняю внутри метода, и убедиться, что для каждого PDF-файла имеется соответствующий файл TIFF. Сейчас метод работает, но я просто хотел узнать, лучший ли способ сделать все это.Лучший способ сравнения файлов?

private bool MatchingFiles(IEnumerable<string> files) 
    { 
     var outputFiles = Directory.GetFiles(TifOutput, "*.tif"); 
     bool foundmatch = true; 
     foreach (string file in files) 
     { 
      string[] strArray = file.Split('\\'); 

      string fileName = strArray[strArray.Length - 1].Replace("PDF", ""); 
      bool filematch = false; 
      foreach (string outputFile in outputFiles) 
      { 
       if (outputFile.Contains(fileName)) 
       { 
        filematch = true; 
        break; 
       } 
      } 
      if (!filematch) 
      { 
       LogMessage(string.Format("File Not Available Yet: {0}", fileName), Level.Info, null); 
       foundmatch = false; 
       break; 
      } 
     } 
     return foundmatch; 
    } 

Заранее благодарим любого, кто поможет мне :)!

+0

Используйте 'Path' имен ... это сделаю вашу жизнь проще. – DonBoitnott

ответ

5

Используйте Path.GetfileNameWithoutExtension, чтобы получить имена файлов только затем использовать Enumerable.Except как:

Вы можете сделать:

return files.Select(r => Path.GetFileNameWithoutExtension(r)) 
      .Except(outputFiles.Select(r => Path.GetFileNameWithoutExtension(r))) 
      .Any(); 

Или

return files.Select(Path.GetFileNameWithoutExtension) 
      .Except(outputFiles.Select(Path.GetFileNameWithoutExtension)) 
      .Any(); 
+0

Итак, любой из них будет делать то же самое, что я делаю по оригинальному методу? –

+0

@AlonsoQuesada, Этот код вернет bool, указав, есть ли разница между файлами и выходными файлами на основе только имени файла. – Habib

+0

@AlonsoQuesada, так что да, это будет то же самое. Я написал свой ответ на основе «главной идеи этого метода является сопоставление всех файлов из полученного списка с файлом внутри другого списка, который я заполняю внутри метода, и чтобы убедиться, что есть соответствующий TIFF-файл для каждого PDF'а, – Habib

Смежные вопросы