在复制和粘贴时找到丢失的文件和子目录及其文件列表?

时间:2013-07-15 12:07:55

标签: c# .net io

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

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

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

2 个答案:

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