user2264703
user2264703

Reputation: 523

Get file from directory with max date in file name

I need get file with max date in file name.

Example of file: zipFiles_2013-04-09_17-04-37.zip

DirectoryInfo di = new DirectoryInfo(FilePath);

I can get only latestValue date. How can I get FullName or Name?

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

Upvotes: 1

Views: 2667

Answers (1)

Sergey Berezovskiy
Sergey Berezovskiy

Reputation: 236208

Order files by their names with OrderByDescending. And then take first one from result:

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

Here GetDateFromFileName is a method which parses DateTime from file name. Something like this:

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

You can also use morelinq (available from NuGet) MaxBy method:

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

Upvotes: 3

Related Questions