找出两个文件夹的区别并删除文件

时间:2012-12-19 08:41:40

标签: c# performance file-io

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

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

感谢名单

5 个答案:

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