使用LINQ比较文件夹

时间:2013-05-09 16:51:52

标签: c# linq compare

编辑:使用更多详细信息编辑问题:

我正在努力比较两个巨大的文件夹,并找出两个文件夹中常见的文件。 MSDN有使用LINQ来解决它的程序:文章MSDN

但是我有一个问题需要解决。

假设我有两个文件夹。 FolderA和FolderB。 FolderA和Folder B有两个子文件夹1和2.

  • C:\ FolderA \ 1 \ a.aspx
  • C:\ FolderA \ 2 \ b.aspx
  • C:\ FolderB中\ 1 \ a.aspx
  • C:\ FolderB中\ 1 \ b.aspx

a.aspx和b.aspx在FolderA和FolderB中都是相同的。注意,b.aspx比不同的子文件夹中存在。

目前的结果: C:\ FolderA \ 1 \ a.aspx C:\ FolderA \ 2 \ b.aspx

我希望结果匹配只是C:\ FolderA \ 1 \ a.aspx,因为它与文件夹结构匹配,文件也是相同的。

我是否可以修改FileCompare类来执行位于同一目录结构中的文件的比较?

我应该做些什么改变才能确保比较正确完成。

谢谢! Sanjeev

1 个答案:

答案 0 :(得分:1)

要使其工作,您需要调整Equals()功能的运行方式。我的建议如下:

第1步 - 为path方法提供Equals()变量:

class CompareDirs
    {

        static void Main(string[] args)
        {

            // Create two identical or different temporary folders  
            // on a local drive and change these file paths. 
            string pathA = @"C:\TestDir";
            string pathB = @"C:\TestDir2";
...

成为

class CompareDirs
    {
        private string pathA, pathB;

        static void Main(string[] args)
        {

            // Create two identical or different temporary folders  
            // on a local drive and change these file paths. 
            pathA = @"C:\TestDir";
            pathB = @"C:\TestDir2";
...

第2步 - 更改Equals()方法以考虑此信息:

我建议使用.replace(pathA, pathB)来比较文件的目录,就像路径是相同的一样。因此,位于相同子目录结构中的任何文件都将具有相同的目录(在执行替换操作之后)。

    public bool Equals(System.IO.FileInfo f1, System.IO.FileInfo f2)
    {
        return (f1.Name == f2.Name &&
                f1.Length == f2.Length &&
                f1.DirectoryName.replace(pathA, pathB) == f2.DirectoryName.replace(pathA, pathB) );
    }