我有两个文件夹:FolderA和FolderB 我想删除FolderB中也存在的FolderA中的文件。 (即将从文件夹A中删除公共文件)
如何在C#中最有效地完成此操作? (这是项目中的一个关键点,它必须尽可能高效)
感谢名单
答案 0 :(得分:3)
这很简单,易读且高效:
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);
}
假设您只想比较文件名(和扩展名)。
答案 1 :(得分:2)
您可以在LINQ的帮助下完成此操作。请参阅here。
答案 2 :(得分:1)
如果您只想比较文件名,请按照以下方法进行操作,我对此代码进行了快速测试,并且有效:
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));
答案 3 :(得分:0)
string[] FolderAFiles = Directory.GetFiles(@"Path");
string[] FolderBFiles = Directory.GetFiles(@"BPath");
foreach (string Files in FolderAFiles)
{
if (FolderBFiles.Contains(Files))
{
File.Delete(Files);
}
}
试试这个
答案 4 :(得分:0)
这是另一个解决方案。
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);
});