1

我正在使用下面的代码删除超过 10 天的文件。有没有更简单/更智能的方法来做到这一点?

string source_path = ConfigurationManager.AppSettings["source_path"];
            string filename= ConfigurationManager.AppSettings["filename"];

            var fileQuery= from file in Directory.GetFiles(source_path,filename,SearchOption.TopDirectoryOnly)
                           where File.GetCreationTime(file)<System.DateTime.Now.AddDays(-10)
                           select file;

            foreach(var f in fileQuery)
            {
                File.Delete(f);
            }
4

2 回答 2

6

那么有两件事我会改变:

  • DateTime 一次确定分界点,而不是DateTime.Now反复重新评估
  • 当您只有一个where子句时,我不会使用查询表达式:

所以我将查询部分重写为:

var cutoff = DateTime.Now.AddDays(-10);
var query = Directory.GetFiles(sourcePath, filename, SearchOption.TopDirectoryOnly)
                     .Where(f => File.GetCreationTime(f) < cutoff);

另一种选择是使用DirectoryInfoand FileInfo

var cutoff = DateTime.Now.AddDays(-10);
var path = new DirectoryInfo(sourcePath);
var query = path.GetFiles(filename, SearchOption.TopDirectoryOnly)
                .Where(fi => fi.CreationTime < cutoff);

(在 .NET 4 中,您可能还想EnumerateFiles改用它。)

于 2012-06-12T16:43:45.307 回答
-1

可以使用 LINQ“单线”来执行此过程:

Directory.GetFiles(source_path,filename,SearchOption.TopDirectoryOnly)
.Where(f => File.GetCreationTime(file) < System.DateTime.Now.AddDays(-10))
.All(f => {File.Delete(f); return true;);

不要忘记将代码包装在 try catch 中。

于 2012-06-12T16:47:34.570 回答