根据创建日期获取文件列表

时间:2014-01-15 09:42:25

标签: c# .net linq file data-structures

我正在尝试编译文件名列表(带有“stat”和“kill”文件扩展名),其中文件应根据创建日期在列表中排序。我已尝试使用LINQ OrderBy子句,但无法指定日期。这是我目前的逻辑:

var fileList = Directory.EnumerateFiles(userPath, "*.*", SearchOption.TopDirectoryOnly).Where(s => s.EndsWith(".stat", StringComparison.InvariantCultureIgnoreCase) || s.EndsWith(".kill", StringComparison.InvariantCultureIgnoreCase));

我怎么能对它们进行排序?

2 个答案:

答案 0 :(得分:2)

改为使用DirectoryInfo - 它返回具有CreationTime属性的FileInfo个对象的序列:

DirectoryInfo dir = new DirectoryInfo(userPath);
var fileList = dir.EnumerateFiles("*.*", SearchOption.TopDirectoryOnly)
                  .Where(f => f.Extension.Equals(".stat", StringComparison.InvariantCultureIgnoreCase) || 
                              f.Extension.Equals(".kill", StringComparison.InvariantCultureIgnoreCase))
                  .OrderBy(f => f.CreationTime);

您还可以使用Extension属性来获取文件扩展名。

答案 1 :(得分:2)

您可以在Enumerable.OrderBy中使用File.GetCreationTime。您也可以使用Path类:

var fileList = Directory.EnumerateFiles(userPath, "*.*", SearchOption.TopDirectoryOnly)
    .Select(p => new { Path = p, Extension = Path.GetExtension(p) })
    .Where(x => x.Extension.Equals(".stat", StringComparison.InvariantCultureIgnoreCase) || x.Extension.Equals(".kill", StringComparison.InvariantCultureIgnoreCase))
    .OrderBy(x => File.GetCreationTime(x.Path))
    .Select(x => x.Path);