【问题标题】:Copy only files that are newer仅复制较新的文件
【发布时间】:2012-10-10 21:28:21
【问题描述】:

我目前正在使用此代码:

    if (!Directory.Exists(command2)) Directory.CreateDirectory(command2);

    if (Directory.Exists(vmdaydir)) Directory.Delete(vmdaydir,true);

    if (!Directory.Exists(vmdaydir)) Directory.CreateDirectory(vmdaydir);

    var dir = Path.GetDirectoryName(args[0]);

    sb.AppendLine("Backing Up VM: " + DateTime.Now.ToString(CultureInfo.InvariantCulture));
    Microsoft.VisualBasic.FileIO.FileSystem.CopyDirectory(dir, vmdaydir);
    sb.AppendLine("VM Backed Up: " + DateTime.Now.ToString(CultureInfo.InvariantCulture));

如您所见,我正在删除目录,然后将文件夹复制回来。由于该目录的大小约为 80gb,因此这需要很长时间。我意识到我不需要复制所有文件,只需复制已更改的文件即可。

如何将文件从一个文件夹复制到另一个文件夹,但只复制较新的文件?有人有什么建议吗?

==== 编辑 ====

我假设我可以对每个文件进行文件比较,然后将其复制到新目录,遍历每个文件夹/文件?有没有更简单的方法来做到这一点?

【问题讨论】:

  • CreateDirectory 只会在它不存在时创建它,因此检查是多余的。
  • 从什么时候开始改变的?您需要在该逻辑发生之前缓存每个文件的最后写入日期。您目前正在这样做吗?
  • @TimSchmelter 谢谢蒂姆,我会做相应的调整。
  • @SimonWhitehead 你明白我在做什么。我没有检查任何东西...

标签: c# copy


【解决方案1】:

使用 FileInfo 类,并使用 LastWriteTime 属性获取文件的最后修改时间。将其与您检查的时间进行比较,并仅获取较晚的文件。

遍历目录中的文件,检查最后修改时间 (FileInfo.LastWriteTime) - 任何较新的文件都会被复制。

更多信息请参见FileInfo Class

【讨论】:

  • 是的,我就是这么想的......我现在正在考虑这样做。
【解决方案2】:

您在尝试执行此操作时需要小心,否则您可能会锁定文件,否则其他应用程序可能无法完成它,您可能会在准备好之前尝试复制它。

所以请按照以下步骤...

1) 尝试锁定文件

2) if(got lock) 复制文件

3) 否则稍等片刻

4) 转到 1

:)

【讨论】:

  • 我的主管会因为我提到 goto 这个词而开枪:P
  • 大声笑,告诉你的主管,goto 在编码方面有很好的功能。在学习如何编码时使用,但是是的... goto = a big no no :)
猜你喜欢
  • 2012-10-22
  • 1970-01-01
  • 1970-01-01
  • 2022-11-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多