2013-06-04 106 views

回答

0

只是分割你的字符串,將日期和在一起的時候,將它轉換爲日期時間,然後查看linq來查找最大日期時間。

編輯:不要忘記將所有的文件名加載到一個數組中,例如,用你構建的日期時間做同樣的事情,這樣你就可以在linq返回的最大日期時間的同一索引處找到好文件名。

0

鑑於您的文件似乎使用可排序的格式,您可以按降序字典順序排列名稱,並取第一個條目。 (或者按照升序排序,當然需要最後一個輸入。)

這是假設你給出的例子是真正具有代表性的,當然。例如,如果你有不同的前綴混合,你可能想從每個文件名解析日期部分。 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個字符。如果您曾將其更改爲使用月份的名稱(或類似的名稱),則需要制定另一種查找文件名的哪一部分是日期/時間的方法。

+0

非常感謝你,喬恩 – zrabzdn

0

你可以用下面的流程走:

  1. 獲得來自特定目錄下的所有文件名。
  2. 解析名稱以獲取日期部分('_'符號之間)。使用Regex.Match
  3. 後,您可以使用DateTime.ParseExact方法來獲取日期
  4. 之後,你可以使用LINQ MAX()方法去收集。
0

這是如何做到這一點:

//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); 
+0

謝謝艾哈邁德KRAIEM – zrabzdn

+0

@ user2382193如果這解決了你的問題,隨時標記答案接受 – Xaqq

0

如果日期格式相同的所有文件,並且如果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爲正確的順序

相關問題