2

我将包含数千个文件的文件夹从我的电脑复制到手机。由于一些干扰,一些文件没有被复制。但文件夹大小接近 1 GB。

所以我检查了只有一些 kb 大小差异的文件夹(源和目标)的文件夹大小。如果我再次复制它意味着它需要一些时间,我需要覆盖现有文件。

而不是我需要列出丢失的文件然后只复制丢失的文件。我可以为此制作一个简单的exe工具吗?我如何找到丢失的文件,任何人都可以提供一些指导。如果您觉得这是一个愚蠢的问题,请不要误会我。

4

2 回答 2

2

我可以为此制作一个简单的exe工具吗?

当然。

我如何找到丢失的文件,任何人都可以提供一些指导。

你需要两个列表。您需要阅读并填写一份,然后阅读并比较以确定缺少的内容。代码可能如下所示:

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

一个警告(这个答案和迈克尔的)是不支持嵌套目录结构 - 如果您还复制了子文件夹,则此代码将不起作用。

编辑以包含用于嵌套子目录的注释中的代码...

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 回答