C# 用于在两个目录之间进行文件比较并将相同文件移动到具有精确目录结构的第三个文件夹的代码
我有一个代码,用于比较两个文件夹(比如文件夹“a”和“文件夹B”)之间的文件,然后将类似的文件移动到第三个位置(比如文件夹“C”)。此代码正在将类似文件移动到文件夹“C”,但不使用文件夹/目录结构。 例如,文件夹A有三个文件夹,即“X、Y、Z”,其中包含文件1、2和3,文件夹B也有三个文件夹“X、Y、Z”,其中包含文件1、2和4。运行此代码后,我从文件夹“A”接收文件1和2,但不在其各自的文件夹结构内,即文件夹X下的-1和文件夹Y下的2C# 用于在两个目录之间进行文件比较并将相同文件移动到具有精确目录结构的第三个文件夹的代码,c#,.net,C#,.net,我有一个代码,用于比较两个文件夹(比如文件夹“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.Co
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
命名空间查询比较目录
{
类比较器
{
静态void Main(字符串[]参数)
{
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();
}
}
string InetA=@“C:\Project\folder1”;
字符串DeplyB=@“C:\Project\folder2”;
字符串BackupLocC=@“C:\Project\folder3”;
System.IO.DirectoryInfo dir1=新的System.IO.DirectoryInfo(InetA);
System.IO.DirectoryInfo dir2=新的System.IO.DirectoryInfo(DeplyB);
IEnumerable list1=dir1.GetFiles(“**”,System.IO.SearchOption.AllDirectories);
IEnumerable list2=dir2.GetFiles(“**”,System.IO.SearchOption.AllDirectories);
FileCompare myFileCompare=新建FileCompare();
bool areedename=list1.SequenceEqual(list2,myFileCompare);
如果(AreeIdentity==真)
{
Console.WriteLine(“两个文件夹相同”);
}
其他的
{
WriteLine(“这两个文件夹不一样”);
}
var queryCommonFiles=list1.Intersect(list2,myFileCompare);
if(queryCommonFiles.Count()>0)
{
WriteLine(“以下文件在两个文件夹中:”);
foreach(queryCommonFiles中的var v)
{
Console.WriteLine(v.FullName);
字符串source_file=v.FullName;
//路径3=替换(源文件,备份)
//Console.WriteLine(“测试”+BackupLocC+“\\”+v.Name+“结束\n”);
File.Move(源文件,BackupLocC+“\\\”+v.Name);
}
}
其他的
{
WriteLine(“这两个文件夹中没有公共文件。”);
}
var queryList1Only=(来自列表1中的文件
选择文件)。除了(列表2,myFileCompare);
WriteLine(“以下文件在列表1中,但不在列表2中:”);
foreach(仅QueryList 1中的变量v)
{
Console.WriteLine(v.FullName);
}
控制台。WriteLine(“按任意键退出”);
Console.ReadKey();
}
}
类文件比较:System.Collections.Generic.IEqualityComparer
{
public bool等于(System.IO.FileInfo f1、System.IO.FileInfo f2)
{
返回值(f1.Name==f2.Name);
}
public int GetHashCode(System.IO.FileInfo-fi)
{
string s=string.Format(“{0}”,fi.Name);
返回s.GetHashCode();
}
}
}
有人能帮我吗?这会有很大的帮助!提前谢谢