检查一个目录中的文件,并按创建时间的顺序存储它们的名称

时间:2010-10-18 18:00:10

标签: c# .net

我想从日志目录中保留现有日志文件的列表。每当此列表达到最大限制时,比方说20个文件,我将删除最旧的日志文件。

每次启动应用程序时,它都会检查日志目录并将所有日志文件名保留在列表中。但是这个列表应该按创建时间排序。

这样做的好方法是什么?感谢,

4 个答案:

答案 0 :(得分:4)

试试这个:

List<FileInfo> fi = new List<FileInfo>();
//load fi
List<FileInfo> SortedFi = fi.OrderBy(t=>t.CreationTime);

答案 1 :(得分:1)

这样的事情:

static void Main(string[] args)
{
    var files = new List<string>();

    foreach (var file in Directory.GetFiles("<path to your log files>"))
    {
        files.Add(file);
    }

    files.Sort(
        new Comparison<string>(
            (a, b) => new FileInfo(b).CreationTime.CompareTo(new FileInfo(a).CreationTime)
        )
    );

    foreach (var file in files.Skip(20))
    {
        // Delete file.
    }
}

答案 2 :(得分:1)

这会抓取早于最新版本20的所有文件并将其删除:

int numberOfFilesToKeep = 20;
string logFilePath = @"c:\temp";
FileInfo[] logFiles = (new DirectoryInfo(logFilePath)).GetFiles();
var oldFiles = logFiles.OrderByDescending(t => t.CreationTime).Skip(numberOfFilesToKeep);
foreach (var file in oldFiles)
    file.Delete(); //you'll want a try/catch here

注意,您可能希望使用上面的LastWriteTime而不是CreationTime,具体取决于日志文件的使用方式。

答案 3 :(得分:0)

using System.Linq;
using System.IO;

DirectoryInfo di = new DirectoryInfo("mylogdir");
FileSystemInfo[] files = di.GetFileSystemInfos();
var orderedFiles = files.OrderBy(f => f.CreationTime);

缓存orderedFiles,并在您转到下一个时根据需要进行刷新。