我有一个代码用于比较两个文件夹之间的文件(比如文件夹“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();
}
}
}
任何人都可以在这里帮助我吗?这将有很大帮助!提前致谢!