2016-01-30 49 views
0

我一直在研究一個c#圖像查看器,它將從我的計算機讀取圖像並將它們顯示在程序中。按編號排序文件名

//foreach file in path display the filename 

foreach (var filename in Directory.GetFiles(<path>)) 
{ 
    MessageBox.show(filename); 
} 

//Get image by number 

var image = Directory.GetFiles(<path>).elementatordefault(<picnumber>).tostring()); 

我的問題是,即使我的圖片在順序排列的文件夾中:1,2,3,4 ..... 12,13,14 .... 101,102,我的應用程序將顯示該文件按以下順序:1,101,102,12,13,2 ...

我將如何顯示正確的圖像,就像他們在電腦的文件夾? 我不敢相信我需要將每個文件添加到數組或列表中,然後執行排序算法...(我還需要分割文件路徑和擴展名),但必須有一個更簡單的方法來完成此操作,任何幫助將非常感激。

+2

實現[自然排序](http://stackoverflow.com/questions/248603/natural-sort-order-in-c-sharp)。 – CodeCaster

+1

'Directory.GetFiles'不會對文件名施加任何命令,Windows資源管理器可能會這樣。您想要的排序類型稱爲「自然排序」,並且一如既往,除非有問題的代碼保證以您想要的方式排序的排序數據,否則您需要自行排序數據(如果需要排序)。 –

+0

不能使用linq?你有沒有試過用linq命令他們?如果它返回一個字符串數組,請檢查這個其他StackOverflow Post [在C#中對字符串數組排序](http://stackoverflow.com/questions/6167068/sorting-string-array-in-c-sharp) – rmjoia

回答

1

我終於弄清楚瞭如何按「自然順序」對文件進行排序,也許有人會發現這個代碼也是如此有用。

 List<string> mylist = new List<string> { }; 
     foreach (var f in Directory.GetFiles(FilePath1)) 
     { 
      mylist.Add(f); 
     } 

     var result = mylist.OrderBy(x => x.Length);