FolderAとFolderBの2つのフォルダーがあります。FolderBにも存在するFolderAのファイルを削除したいと思います。(つまり、共通ファイルはfolderAから削除されます)
これをC#で最も効率的に行うにはどうすればよいですか?(これはプロジェクトの重要なポイントであり、可能な限り効率的である必要があります)
ありがとう
FolderAとFolderBの2つのフォルダーがあります。FolderBにも存在するFolderAのファイルを削除したいと思います。(つまり、共通ファイルはfolderAから削除されます)
これを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);
}
}
これを試して
これがもう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);
});