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();
}
}
}
誰かここで私を助けてくれませんか? それは大いに役立つでしょう!前もって感謝します!