更好的比较文件的方法?

时间:2014-10-14 19:25:12

标签: c# performance foreach

我有这个方法接收一个IEnumerable的字符串,它基本上是一个文件列表(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;
    }

提前感谢任何能帮助我的人:)!

1 个答案:

答案 0 :(得分: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();