删除超过某些天数的文件

时间:2009-11-12 08:41:05

标签: c#

我想这是一个非常常见的要求,在一个应用程序中进行了大量的日志记录。我正在开发一个C#Windows应用程序.NET 3.5。

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

7 个答案:

答案 0 :(得分:33)

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);
    }
}

答案 1 :(得分:10)

更新.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();
}

答案 2 :(得分:1)

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);
    }
}

答案 3 :(得分:1)

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

然后代码是这样的:

    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);
    }

答案 4 :(得分:1)

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

  

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

     

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

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

答案 5 :(得分:0)

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

答案 6 :(得分:0)

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