使用linq选择最后写入的文件

时间:2009-10-20 13:58:28

标签: c# linq file

我希望从目录及其扩展中获取最新的文件。

目录中可能存在的文件的示例(及其创建日期):

2009-10-20T07:00:00.000 filename1.mp4
2009-10-20T07:00:01.000 filename1_0.mp4
2009-10-20T07:00:02.000 filename1_1.mp4
2009-10-20T07:00:00.000 filename1.wmv
2009-10-20T07:10:00.000 filename2.mp4
2009-10-20T07:10:00.000 filename2.wmv

请注意,mp4格式的名为“filename1”的文件有3个版本,按顺序编号。我正在寻找名为'filename1'的文件,以获得以下结果(无特定顺序):

filename1_1.mp4
filename1.wmv

因为这些文件是最新创建的两个扩展名,但两者都有文件名'filename1',我希望。

2 个答案:

答案 0 :(得分:3)

foreach (FileInfo fi in GetLatestFiles("c:\\test\\", "filename1"))
{
    Console.WriteLine(fi.Name);
}

// ...

public static IEnumerable<FileInfo> GetLatestFiles(string path, string baseName)
{
    return new DirectoryInfo(path)
        .GetFiles(baseName + "*.*")
        .GroupBy(f => f.Extension)
        .Select(g => g.OrderByDescending(f => f.LastWriteTime).First());
}

答案 1 :(得分:0)

var files = Directory.GetFiles("dir name").Select(str => new FileInfo(str))
            .Where(file => file.Name.StartsWith("filename1"))
            .Where(file => file.LastWriteTime > DateTime.Now.AddDays(-1));

foreach(var file in files)
{
 Console.Write(file.Extension);
}

您需要将“filename1”和DateTime.Now替换为您需要的内容