首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在C#中执行文件复制?

在C#中执行文件复制?
EN

Stack Overflow用户
提问于 2009-11-05 06:49:05
回答 5查看 3.1K关注 0票数 7

我有一个很大的目录,里面有大约500k的jpg文件,我想归档所有早于某个日期的文件。目前,该脚本需要数小时才能运行。

这与GoGrid的存储服务器非常糟糕的性能有很大关系,但同时,我相信有一种更有效的方法来完成我正在做的事情。

下面是我的代码:

代码语言:javascript
运行
复制
var dirInfo = new DirectoryInfo(PathToSource);
var fileInfo = dirInfo.GetFiles("*.*");
var filesToArchive = fileInfo.Where(f => 
    f.LastWriteTime.Date < StartThresholdInDays.Days().Ago().Date
      && f.LastWriteTime.Date >= StopThresholdInDays.Days().Ago().Date
);

foreach (var file in filesToArchive)
{
    file.CopyTo(PathToTarget+file.Name);
}

Days().Ago()只是语法上的糖。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2009-11-05 07:30:24

虽然.NET 4.0提供了惰性Directory.EnumerateFiles,但你现在可以在.NET 3.5上做到这一点:

  • http://weblogs.asp.net/podwysocki/archive/2008/10/16/functional-net-fighting-friction-in-the-bcl-with-directory-getfiles.aspx
  • http://codebetter.com/blogs/matthew.podwysocki/archive/2009/03/18/functional-net-laziness-becomes-you.aspx
  • http://bugsquash.blogspot.com/2008/07/y-combinator-and-linq.html
  • http://www.atalasoft.com/cs/blogs/stevehawley/archive/2009/06/02/more-ienumerable-t-fun.aspx
票数 3
EN

Stack Overflow用户

发布于 2009-11-05 06:58:49

我认为您可以改进的唯一部分是dirInfo.GetFiles("*.*")。在.NET 3.5和更早的版本中,它返回一个包含所有文件名的数组,这需要时间来构建并使用大量内存。在.NET 4.0中,有一个新的Directory.EnumerateFiles方法,它返回一个IEnumerable<string>,并在从磁盘读取结果时立即获取结果。这可能会稍微提高性能,但不要期待奇迹...

票数 10
EN

Stack Overflow用户

发布于 2009-11-05 07:09:52

您应该考虑使用第三方实用程序为您执行复制。像robocopy这样的东西可能会显着提高处理速度。另请参阅https://serverfault.com/questions/54881/quickest-way-of-moving-a-large-number-of-files

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1677226

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档