Reputation: 523
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
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