我将包含数千个文件的文件夹从我的电脑复制到手机。由于一些干扰,一些文件没有被复制。但文件夹大小接近 1 GB。
所以我检查了只有一些 kb 大小差异的文件夹(源和目标)的文件夹大小。如果我再次复制它意味着它需要一些时间,我需要覆盖现有文件。
而不是我需要列出丢失的文件然后只复制丢失的文件。我可以为此制作一个简单的exe工具吗?我如何找到丢失的文件,任何人都可以提供一些指导。如果您觉得这是一个愚蠢的问题,请不要误会我。
我可以为此制作一个简单的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
列表中。然后,您可以遍历该列表以将那些丢失的文件复制到目标。
用于检索需要复制的文件列表的强制性 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));