2009-06-18 24 views
3

比方說,我已經按名稱排序的文件列表在資源管理器,像這樣:如何按名稱對文件列表進行排序以匹配Windows資源管理器顯示它們的方式?

2009-06-02-4.0.9.txt
2009-06-02-4.0.10.txt
2009-06-02-4.0.11.txt
2009-06-02-4.0.12.txt

我有一個FileInfo的Comparer通過名字排序的FileInfo對象的數組:

class FileInfoComparer : IComparer<FileInfo> { 
     public int Compare(FileInfo x, FileInfo y) { 
      return string.Compare(x.FullName, 
            y.FullName, 
            StringComparison.OrdinalIgnoreCase); 
     } 
    } 

使用此Comparer對上面相同的文件列表進行排序產量:

2009-06-02-4.0.10.txt
2009-06-02-4.0.11.txt
2009-06-02-4.0.12.txt
2009-06-02 -4.0.9.txt

這是個問題,因爲順序是非常重要的。

我會想象有辦法模仿什麼的Windows在C#代碼是幹什麼的,但我還沒有找到一種方法。任何幫助表示讚賞!

謝謝!

+0

[C#中自然排序]的可能重複(http://stackoverflow.com/questions/248603/natural-sort-order-in-c-sharp) – 2013-05-18 10:35:17

回答

10

Windows資源管理器使用稱爲API:

StrCmpLogicalW 

在 「邏輯」 的方式進行排序。

又有人implemented a class in C#這會爲你做到這一點。

+0

很不錯的!謝謝! – Pwninstein 2009-06-18 14:51:02

3

您還可以使用P/Invoke來調用Win32 API。這將是最一致的行爲,並可能表現更好(我會對兩個選項進行基準測試)。即使代碼項目鏈接與Windows行爲不完全一致,也不是未來的證明。

2

你需要一個自然數字排序這很不幸,沒有本機實現在.NET框架。 CodeProject上的This article會告訴你所有你需要知道的有關製作你自己的.NET克隆的知識。

+1

在託管代碼中實現您自己的StrCmpLogicalW版本是最好的選擇,代碼項目文章使其非常容易。 – kingdango 2012-03-07 21:08:26

相關問題