【问题标题】:Deleting files from directory with creation date filter使用创建日期过滤器从目录中删除文件
【发布时间】:2013-01-15 08:57:29
【问题描述】:

我正在尝试删除所有超过 1 小时的 pdf 文件,我正在使用此代码

System.IO.DirectoryInfo directory = new DirectoryInfo(System.Configuration.ConfigurationManager.AppSettings["PDFFilesPath"]);
var files = directory.GetFiles("*.pdf").Where(f => DateTime.Now.Subtract(f.CreationTime).TotalMinutes >= int.Parse(System.Configuration.ConfigurationManager.AppSettings["MinutesOld"]));
foreach (var file in files)
{
    file.Delete();
}

代码运行良好,符合预期。

但我想知道是否有任何方法不使用 foreach 或任何其他较小的方法 实现这一目标

提前致谢!

【问题讨论】:

  • foreach 有什么问题?你的方法对我来说很好。
  • 如果您是这个意思,您不能一次全部删除它们。您可以使用Parallel.ForEach 并行运行它们(.Net 4 和 4.5)
  • foreach 是的较小部分,我想说... =) 但是,为了缩短您的代码,您可以通过将您的using 语句中的命名空间位于顶部。
  • @PawanNogariya:我第一眼看到的唯一一件事是您可以将directory.GetFiles 替换为directory.EnumerateFiles。后者(4 中的新功能)不需要在开始处理之前将所有内容加载到内存中。
  • 如果您想查看或改进工作代码,请尝试Codereview.stackexchange

标签: c# io


【解决方案1】:

如果您想要一个衬里,您可以使用:

files.ToList<FileInfo>().ForEach((FileInfo f) => { f.Delete(); });

但这是低效的,真的没有任何意义。你目前的做法是正确的。

请参阅this article 了解更多信息。

【讨论】:

    【解决方案2】:

    您可以使用 LINQ 在您的 Linq 代码末尾添加以下内容。

    .ToList()
        .ForEach(f => f.Delete());
    

    请记住,即使是后台的 Linq 也会使用迭代器;我会照原样离开

    也看看这个答案

    Delete files older than 3 months old in a directory using .NET

    【讨论】:

      猜你喜欢
      • 2011-01-13
      • 2017-05-20
      • 2021-06-01
      • 2022-06-15
      • 2021-11-06
      • 2018-07-16
      • 2022-07-06
      • 2021-08-21
      • 1970-01-01
      相关资源
      最近更新 更多