-4

编辑:用更多细节编辑问题:

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

但是,我正在尝试解决一个问题。

假设我有两个文件夹。文件夹 A 和文件夹 B。文件夹 A 和文件夹 B 有两个子文件夹 1 和 2。

  • C:\文件夹A\1\a.aspx
  • C:\文件夹A\2\b.aspx
  • C:\文件夹B\1\a.aspx
  • C:\文件夹B\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 类来比较位于同一目录结构中的文件吗?

或者

我应该进行哪些更改以确保正确完成比较。

谢谢!桑吉夫

4

1 回答 1

1

To make this work, you will need to adjust how the Equals() function operates. My suggestion is as follows:

Step 1 - Make path variables available to the Equals() method:

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";
...

becomes

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";
...

Step 2 - Change Equals() method to consider this information:

I suggest using .replace(pathA, pathB) to enable the directories of the files to be compared as if the path was the same. Thus any files that are in the same subdirectory structure will be have the same directory overall (after the replace operation has been performed).

    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) );
    }
于 2013-05-09T17:06:47.773 回答