我将包含数千个文件的一个文件夹从我的电脑复制到手机。由于某些干扰,有些文件没有复制。但文件夹大小接近1 GB。
所以我检查两个文件夹(来源和目的地)的文件夹大小只有一些kb的大小差异。如果我再次复制意味着需要花费一些时间,我需要覆盖现有文件。
而不是我需要列出缺少的文件,然后只复制丢失的文件。我可以为此制作一个简单的exe工具。如何找到丢失的文件可以任何人给出一些指导。如果你觉得这是愚蠢的问题,不要误会我。
答案 0 :(得分: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
列表中。然后,您可以循环遍历该列表,将这些丢失的文件复制到目标。
答案 1 :(得分: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));