2011-07-08 149 views
6

嗨我有一個文件夾中的許多文件。這些文件具有特定格式的文件名中的日期和時間。我需要從名稱中提取日期,然後按升序對日期進行排序。 文件名如: -如何使用c#按文件名按日期排序文件?

format_type_2011-07-12-13-00-12.txt

早些時候,我使用createTime。但現在需求發生了變化。

var Files = new DirectoryInfo(FileDirectory).GetFiles() 
                  .OrderBy(f => f.CreationTime) 
                  .ToList(); 

我該怎麼做?任何幫助表示讚賞。

+0

寫一個函數來提取日期,並以一個呼叫更換問號功能....? – Roly

+1

與此問題類似:http://stackoverflow.com/questions/1199006/how-to-sort-an-array-of-fileinfo-c – Tremmors

+0

初始創建後文件是否被訪問或更新?是否有理由不能使用FileInfo.CreationTime(或LastWriteTime)屬性? – IAbstract

回答

7

這應該工作:

var di = new DirectoryInfo(FileDirectory); 
var Files = di.GetFiles() 
       .OrderBy(f => f.Name.Substring(f.Name.LastIndexOf('_')+1) 
       .ToList(); 

由於您的文件名(減去格式信息)已經在ISO8601順序(年份第一,然後是月份,然後日期等),您可以根據字符串W/O不得不轉換爲日期進行排序。

+1

+1用於解釋「已經以ISO8601順序」 –

+0

@BrokenGlass:謝謝 – User13839404

0

你接近:

var Files = new DirectoryInfo(@"C:\").GetFiles() 
            .OrderBy(f => f.LastWriteTime) 
            .ToArray(); //or .ToList() whatever suits you best 
+0

@Adrain。我需要根據文件名按日期和時間排序。我無法使用FileInfo。 – User13839404

0

我認爲這個代碼應該爲你工作:

var Files = new DirectoryInfo(@"W:\").GetFiles().OrderBy(f=> f.LastWriteTime).ToList(); 
0
var Files = new DirectoryInfo(FileDirectory) 
        .GetFiles() 
        .OrderBy(f => f.Name.Substring(f.Name.Length - 23, 19) 
        .ToList(); 
1

您可以使用普通的字符串操作符在排序依據語句exract要排序的部分:

string f1 = "Foo_2011-07-12-13-00-12.txt"; 
    string f2 = "Bar_2011-07-12-13-00-15.txt"; 
    string f3 = "Blah_2011-07-12-13-00-11.txt"; 

    int sortRelevant = "0000-00-00-00-00-00.txt".Length; 

    List<string> files = new List<string>() { f1, f2, f3 }; 

    var sorted = (from f in files orderby f.Substring(f.Length - sortRelevant) select f); 

    foreach (string fs in sorted) 
    { 
     Console.WriteLine(fs); 
    } 
相關問題