2

我有一个代码用于比较两个文件夹之间的文件(比如文件夹“A”和“文件夹 B”),然后将类似的文件移动到第三个位置(比如文件夹“C”)。此代码将类似文件移动到文件夹“C”,但不使用文件夹/目录结构。例如,文件夹 A 有三个文件夹,即“X、Y、Z”和文件 1、2 和 3,文件夹 B 也有三个文件夹“X、Y、Z”和文件,即 1、2 和 4。运行此代码后我从文件夹“A”接收文件 1 和 2,但不在它们各自的文件夹结构中,即文件夹 X 下的 1 和文件夹 Y 下的 2。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;

命名空间 QueryCompareTwoDirs { 类 CompareDirs { 静态无效 Main(string[] args) {

        string InetA = @"C:\Project\folder1";
        string DeplyB = @"C:\Project\folder2";
        string BackupLocC = @"C:\Project\folder3";


        System.IO.DirectoryInfo dir1 = new System.IO.DirectoryInfo(InetA);
        System.IO.DirectoryInfo dir2 = new System.IO.DirectoryInfo(DeplyB);



        IEnumerable<System.IO.FileInfo> list1 = dir1.GetFiles("*.*", System.IO.SearchOption.AllDirectories);
        IEnumerable<System.IO.FileInfo> list2 = dir2.GetFiles("*.*", System.IO.SearchOption.AllDirectories);            

        FileCompare myFileCompare = new FileCompare();


        bool areIdentical = list1.SequenceEqual(list2, myFileCompare);

        if (areIdentical == true)
        {
            Console.WriteLine("the two folders are the same");
        }
        else
        {
            Console.WriteLine("The two folders are not the same");
        }



        var queryCommonFiles = list1.Intersect(list2, myFileCompare);

        if (queryCommonFiles.Count() > 0)
        {
            Console.WriteLine("The following files are in both folders:");
            foreach (var v in queryCommonFiles)
            {
                Console.WriteLine(v.FullName); 

                string source_file = v.FullName;

                // Path3 = replace(source_file, BackupLocC)
                //Console.WriteLine("testing " + BackupLocC + "\\" + v.Name + "Ending \n");
                File.Move(source_file, BackupLocC + "\\" + v.Name);
            }





        }
        else
        {
            Console.WriteLine("There are no common files in the two folders.");
        }


        var queryList1Only = (from file in list1
                              select file).Except(list2, myFileCompare);

        Console.WriteLine("The following files are in list1 but not list2:");
        foreach (var v in queryList1Only)
        {
            Console.WriteLine(v.FullName);
        }


        Console.WriteLine("Press any key to exit.");
        Console.ReadKey();
    }
}


class FileCompare : System.Collections.Generic.IEqualityComparer<System.IO.FileInfo>
{


    public bool Equals(System.IO.FileInfo f1, System.IO.FileInfo f2)
    {
        return (f1.Name == f2.Name);
    }


    public int GetHashCode(System.IO.FileInfo fi)
    {
        string s = String.Format("{0}", fi.Name);
        return s.GetHashCode();

    }
}

}

任何人都可以在这里帮助我吗?这将有很大帮助!提前致谢!

4

0 回答 0