2

何千ものファイルを含む 1 つのフォルダーを PC からモバイルにコピーします。何らかの干渉により、いくつかのファイルがコピーされません。ただし、フォルダーのサイズはほぼ 1 GB です。

したがって、両方のフォルダー (ソースと宛先) のフォルダー サイズを確認しますが、サイズの違いはわずか数 kb です。それをもう一度コピーすると、時間がかかり、既存のファイルを上書きする必要があります。

その代わりに、欠落しているファイルをリストしてから、欠落しているファイルのみをコピーする必要があります。このための簡単な exe ツールを 1 つ作成できますか。不足しているファイルを見つける方法は、誰でもガイドを提供できます。ばかげた質問だと思われる場合は、誤解しないでください。

4

2 に答える 2

2

このための簡単な exe ツールを 1 つ作成できますか。

もちろん。

不足しているファイルを見つける方法は、誰でもガイドを提供できます。

2 つのリストが必要です。1 つを読んで記入してから、読んで比較し、何が欠けているかを判断する必要があります。コードは次のようになります。

var targetFiles = new List<string>();
foreach (var f in Directory.GetFiles(targetDir))
{
    targetFiles.Add(Path.GetFileName(f));
}

var missingFiles = new List<string>();
foreach (var f in Directory.GetFiles(sourceDir))
{
    if (targetFiles.Contains(Path.GetFileName(f))) { continue; }
    missingFiles.Add(Path.GetFileName(f));
}

これで、ターゲット内の不足しているすべてのファイルがmissingFilesリストに表示されます。次に、そのリストをループして、不足しているファイルをターゲットにコピーできます。

于 2013-07-15T12:13:04.220 に答える
1

コピーする必要があるファイルのリストを取得するための必須の linq バージョンのコード:

var srcFiles = Directory.GetFiles(sourceDir).Select(f => Path.GetFileName(f));
var destFiles = Directory.GetFiles(destinationDir).Select(f => Path.GetFileName(f));

var filesToCopy = src.Except(dest);

1 つの注意点 (この回答とマイケルの両方) は、ネストされたディレクトリ構造がサポートされないことです。サブフォルダーもコピーされている場合、このコードは機能しません。

ネストされたサブディレクトリに使用されるコメントからのコードを含めるように編集します...

var srcFiles = Directory.GetFiles(sourceDir,"*.*", System.IO.SearchOption.AllDirectories).Select(f => Path.GetFullPath(f).SubString(sourceDir.Length));
var destFiles = Directory.GetFiles(sourceDir,"*.*", System.IO.SearchOption.AllDirectories).Select(f => Path.GetFullPath(f).SubString(sourceDir.Length));

var filesToCopy = src.Except(dest);
var fullPathOfFilesToCopy = src.Except(dest).Select(s => Path.Combine(sourceDir, s));
于 2013-07-15T12:18:54.023 に答える