删除超过某些天数的文件
我想在应用程序中执行相当多的日志记录时,这是一个非常常见的要求。 我正在开发一个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); } }