删除超过某些天数的文件

我想在应用程序中执行相当多的日志记录时,这是一个非常常见的要求。 我正在开发一个C#Windows应用程序.NET 3.5。

我的应用程序生成大量的日志文件,其当前日期放在文件名中,如此版本20091112.什么是删除早于30天的文件的最佳策略。 我即将使用它的一种方法是遍历文件名,提取日期部分,转换为DateTime对象并与今天的日期进行比较。 这是一个优雅的正则表达式解决方案:)? 还是更好的东西?

var files = new DirectoryInfo(@"c:\log").GetFiles("*.log"); foreach (var file in files) { if (DateTime.UtcNow - file.CreationTimeUtc > TimeSpan.FromDays(30)) { File.Delete(file.FullName); } } 

更新.net 4.0:

 var files = new DirectoryInfo(directoryPath).GetFiles("*.log"); foreach (var file in files.Where(file => DateTime.UtcNow - file.CreationTimeUtc > TimeSpan.FromHours(2))) { file.Delete(); } 
 string directoryPath = "/log"; // your log directory path foreach (string filePath in Directory.GetCreationTime(directoryPath)) { TimeSpan fileAge = File.GetLastWriteTime(filePath) - DateTime.Now; if (fileAge.Days > 30) { File.Delete(filePath); } } 

据我了解,您希望使用文件名而不是修改时间。 精细。

然后代码是这样的:

  foreach (string file in Directory.GetFiles(path)) { string fileNameOnly=Path.GetFileNameWithoutExtension(file); DateTime fileDate = DateTime.ParseExact(fileNameOnly, "yyyyMMDD", CultureInfo.CurrentCulture); if (DateTime.Now.Subtract(fileDate).TotalDays > MaxDays) File.Delete(file); } 

[在PowerShell中]您可以将以下内容粘贴到PS1文件中,并使其成为管理脚本的一部分(如果适合): –

param($ path = $(throw“需要指示路径”),$ daysToRetain = $(抛出“需要指示要保留多少天”))

dir $ path -r | ? {([datetime] :: UtcNow – $ _。CreationTimeUtc).TotalDays -gt $ daysToRetain} | 德尔

编辑:如果您觉得使用文件时间不是正确的事情,您可以使用-match来解析名称

提取两个DateTime对象将为您提供TimeSpan对象,然后您可以检查其TotalDays属性。 我想不出比这更简单的东西。

 string[] files = Directory.GetFiles(path); foreach (string file in files) { if (File.GetLastWriteTime(file) < DateTime.Now.AddDays(-5)) { File.Delete(file); } }