2012-04-19 21 views
-2

我有我的文件夾中的文件有這樣的名字:訂購1,2,10,11代替1,10,11,2

"C:\\Users\\John\\Documents\\333\\12.html" 

如何對它們進行排序,以便將2.HTML 10日前來HTML嗎?

+3

Windows資源管理器?諾頓指揮官? 'DirectoryInfo.GetFiles()'? – CodeCaster 2012-04-19 12:31:55

+0

單擊瀏覽器列「名稱」來反轉排序! – Alex 2012-04-19 12:32:40

+0

這與c#有什麼關係? – 2012-04-19 12:32:44

回答

2

解析字符串爲數字,當你對文件進行排序。

例子:

string[] files = { 
    "2.html", 
    "10.html", 
    "1.html" 
}; 

files = 
    files.OrderBy(s => Int32.Parse(s.Substring(0, s.IndexOf('.')))) 
    .ToArray(); 
+0

然後它會在「Part 1.html」,「a.html」和「b.html」上失敗。您的解決方案只適用於類似'的文件名的特定情況。 '。 – penartur 2012-04-19 12:39:02

+0

@penartur:符合規格。閱讀問題。 – 2012-04-19 12:40:31

+0

這個問題說「文件名是** ** **'3.html'」,而不是「文件名正好是'''。在問題的上下文中,「part 3.html」就像「3.html」。 – penartur 2012-04-20 08:05:52

0

看看這個帖子 -

http://www.codeproject.com/Articles/11016/Numeric-String-Sort-in-C

string[] files = System.IO.Directory.GetFiles(); 

NumericComparer ns = new NumericComparer(); 
Array.Sort(files, ns); 

// files will now sorted in the numeric order 
// we can do the same for directories 

string[] dirs = System.IO.Directory.GetDirectories(); 
ns = new NumericComparer(); // new object 
Array.Sort(dirs, ns); 

public class NumericComparer : IComparer 
    { 
     public NumericComparer() 
     {} 

     public int Compare(object x, object y) 
     { 
      if((x is string) && (y is string)) 
      { 
       return StringLogicalComparer.Compare((string)x, (string)y); 
      } 
      return -1; 
     } 
    }//EOC 
+0

在什麼anmespace是NumericComparer? – user1322207 2012-04-19 12:37:53

+0

@ user1322207看看這個鏈接有一個下載的例子,我也編輯我的答案 – 2012-04-19 12:41:36

2
Directory 
     .GetFiles() 
     .OrderBy(f => int.Parse(Path.GetFileNameWithoutExtension(f)))