-4

FolderAとFolderBの2つのフォルダーがあります。FolderBにも存在するFolderAのファイルを削除したいと思います。(つまり、共通ファイルはfolderAから削除されます)

これを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

これがもう1つの解決策です。

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 に答える