我正在使用下面的代码删除超过 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);
}
好吧,我要改变两件事:
- 一次性确定截止
DateTime
,而不是反复重新评估DateTime.Now
- 当您刚刚得到一个
where
子句时,我不会使用查询表达式:
所以我将查询部分重写为:
var cutoff = DateTime.Now.AddDays(-10);
var query = Directory.GetFiles(sourcePath, filename, SearchOption.TopDirectoryOnly)
.Where(f => File.GetCreationTime(f) < cutoff);
另一种选择是使用 DirectoryInfo
和 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
。
可以执行 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 中。