2016-01-30 50 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);