-4

我有两个文件夹:FolderA 和 FolderB 我想删除 FolderA 中也存在于 FolderB 中的文件。(即常用文件将从文件夹A中删除)

如何在 C# 中最有效地做到这一点?(这是项目中的一个关键点,它必须尽可能高效)

谢谢

4

5 回答 5

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);
}

假设您只想比较文件名(和扩展名)。

于 2012-12-19T08:49:17.720 回答
2

您可以在 LINQ 的帮助下做到这一点。见这里

于 2012-12-19T08:48:56.003 回答
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));
于 2012-12-19T08:49:46.660 回答
0
 string[] FolderAFiles = Directory.GetFiles(@"Path");
            string[] FolderBFiles = Directory.GetFiles(@"BPath");
            foreach (string Files in FolderAFiles)
            {
                if (FolderBFiles.Contains(Files))
                {
                    File.Delete(Files);
                }
            }

试试这个

于 2012-12-19T08:51:07.520 回答
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);
});
于 2012-12-19T08:55:58.467 回答