2

2 つのフォルダー (フォルダー 'A' と 'フォルダー B' など) 間でファイルを比較し、同様のファイルを 3 番目の場所 (フォルダー 'C' など) に移動するコードがあります。このコードは、同様のファイルをフォルダー 'C' に移動していますが、フォルダー/ディレクトリ構造では移動していません。たとえば、フォルダ A には、ファイル 1、2、および 3 を含む「X、Y、Z」という 3 つのフォルダがあり、フォルダ B には、ファイル、すなわち 1、2、および 4 を含む「X、Y、Z」という 3 つのフォルダもあります。このコードを実行した後フォルダー '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 { class CompareDirs { static void 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