我在目錄中有zip文件。如何獲得文件名中的最大日期時間文件?從目錄獲取文件的最大日期時間名稱
我的文件格式:
Files_2013.06.04_15-42-55.zip Files_2013.06.03_15-42-55.zip ...
我在目錄中有zip文件。如何獲得文件名中的最大日期時間文件?從目錄獲取文件的最大日期時間名稱
我的文件格式:
Files_2013.06.04_15-42-55.zip Files_2013.06.03_15-42-55.zip ...
只是分割你的字符串,將日期和在一起的時候,將它轉換爲日期時間,然後查看linq來查找最大日期時間。
編輯:不要忘記將所有的文件名加載到一個數組中,例如,用你構建的日期時間做同樣的事情,這樣你就可以在linq返回的最大日期時間的同一索引處找到好文件名。
鑑於您的文件似乎使用可排序的格式,您可以按降序字典順序排列名稱,並取第一個條目。 (或者按照升序排序,當然需要最後一個輸入。)
這是假設你給出的例子是真正具有代表性的,當然。例如,如果你有不同的前綴混合,你可能想從每個文件名解析日期部分。 LINQ將使這個合理簡單:
var latestFile = files.OrderByDescending(ParseFileDateTime)
.FirstOrDefault();
...
public static DateTime ParseFileDateTime(string name)
{
int dateTimeStartIndex = name.Length - 19;
if (dateTimeStartIndex < 0)
{
throw new ArgumentException("No date/time in filename: " + name);
}
string text = name.Substring(dateTimeStartIndex);
return DateTime.ParseExact(text,
"yyyy'.'MM'.'dd'_'HH'-'mm'-'ss",
CultureInfo.InvariantCulture);
}
FirstOrDefault
將返回null如果files
爲空序列。
請注意,由於您的日期/時間格式爲固定長度,因此只能取走最後的19個字符。如果您曾將其更改爲使用月份的名稱(或類似的名稱),則需要制定另一種查找文件名的哪一部分是日期/時間的方法。
你可以用下面的流程走:
這是如何做到這一點:
//var files = Directory.EnumerateFiles("path/to/dir");
var files = {"Files_2013.06.04_15-42-55.zip", "Files_2013.06.03_15-42-55.zip"};
var date = files.Max(f =>
DateTime.ParseExact(f, "'Files_'yyyy'.'MM'.'dd'_'HH'-'mm'-'ss'.zip'",
CultureInfo.InvariantCulture));
Console.WriteLine(date);
如果日期格式相同的所有文件,並且如果2013年6月4日的是一個月數,那麼你可以避開DateTime.Parse或ParseExact 。
注意:這些方法僅適用於文件名中的日期遵循模式yyyy.MM.dd_HH-mm-ss。
如果所有文件名都是總是遵循相同的模式(在你的情況'File_yyyy.MM.dd_HH-mm-ss。拉鍊'),那麼你可以使用最大元素
var files = Directory.GetFiles(path);
var fileWithMaxDate = files.Any() ? files.Max(f=>f) : (string)null;
對於情況下,如果僅日期部分追蹤圖形yyyy.MM.dd_HH-MM-SS:
private const string DatePattern = "yyyy.MM.dd_HH-mm-ss";
private static readonly int DatePatternLen = DatePattern.Length;
var files = Directory.GetFiles(path);
var fileWithMaxDate = files
.Where
(f => Path.GetFileNameWithoutExtension(f).Length >= DatePatternLen)
.OrderByDescending
(f => Path.GetFileNameWithoutExtension(f)
.Substring(f.Length - DatePatternLen))
.FirstOrDefault();
在你需要轉換其他案件日期部分DateTime爲正確的順序
非常感謝你,喬恩 – zrabzdn