从文件名中包含最大日期的目录中获取文件

时间:2013-04-10 06:18:08

标签: c# linq directory

我需要在文件名中获取带有最大日期的文件。

文件示例:zipFiles_2013-04-09_17-04-37.zip

DirectoryInfo di = new DirectoryInfo(FilePath);

我只能获得最新的值日期。我怎样才能获得FullName或Name?

DateTime latestValue;
di.GetFiles().Max(x => DateTime.TryParseExact(GetFileNameDate(x.FullName), "yyyy-MM-dd_HH-mm-ss", CultureInfo.InvariantCulture, DateTimeStyles.None, out latestValue));

1 个答案:

答案 0 :(得分:3)

使用OrderByDescending按名称订购文件。然后从结果中取出第一个:

var latestFile = di.GetFiles()
                   .OrderByDescending(f => GetDateFromFileName(f.FullName))
                   .First();

此处GetDateFromFileName是一种从文件名解析DateTime的方法。像这样:

private DateTime GetDateFromFileName(string fileName)
{
   DateTime date;
   if (DateTime.TryParseExact(GetFileNameDate(fileName), 
         "yyyy-MM-dd_HH-mm-ss", CultureInfo.InvariantCulture, DateTimeStyles.None, out date))
      return date;
   // default value if date cannot be parsed (you can use nullable DateTime also)
   return DateTime.MinValue;
};

您还可以使用morelinq(可从NuGet获取)MaxBy方法:

var latestFile = di.GetFiles().MaxBy(f => GetDateFromFileName(f.FullName));