我有两个文件夹:FolderA 和 FolderB 我想删除 FolderA 中也存在于 FolderB 中的文件。(即常用文件将从文件夹A中删除)
如何在 C# 中最有效地做到这一点?(这是项目中的一个关键点,它必须尽可能高效)
谢谢
我有两个文件夹:FolderA 和 FolderB 我想删除 FolderA 中也存在于 FolderB 中的文件。(即常用文件将从文件夹A中删除)
如何在 C# 中最有效地做到这一点?(这是项目中的一个关键点,它必须尽可能高效)
谢谢
这是简单、易读且高效的:
var common = from f1 in Directory.EnumerateFiles(folderA, "*.*", SearchOption.AllDirectories)
join f2 in Directory.EnumerateFiles(folderB, "*.*", SearchOption.AllDirectories)
on Path.GetFileName(f1) equals Path.GetFileName(f2)
select f1;
foreach (string file in common)
{
File.Delete(file);
}
假设您只想比较文件名(和扩展名)。
您可以在 LINQ 的帮助下做到这一点。见这里。
如果您只想比较文件名,可以这样做,我对此代码进行了快速测试,它可以工作:
string pathA = @"C:\New FolderA";
string pathB = @"C:\New FolderB";
var filesA = Directory.GetFiles(pathA).Select(path => Path.GetFileName(path));
var filesB = Directory.GetFiles(pathB).Select(path => Path.GetFileName(path));
var toBeDeleted = filesA.Intersect(filesB);
foreach (string filename in toBeDeleted)
File.Delete(Path.Combine(pathA, filename));
string[] FolderAFiles = Directory.GetFiles(@"Path");
string[] FolderBFiles = Directory.GetFiles(@"BPath");
foreach (string Files in FolderAFiles)
{
if (FolderBFiles.Contains(Files))
{
File.Delete(Files);
}
}
试试这个
这是另一种解决方案。
var filesInB = System.IO.Directory.GetFiles("FolderB");
Array.ForEach(System.IO.Directory.GetFiles("FolderA"), delegate(string fileName){
if (filesInB.Contains(fileName)) System.IO.File.Delete(fileName);
});