2016-09-25 98 views
-1

string mypath = txtPath.Text;按名稱排列所有文件c#

DirectoryInfo d = new DirectoryInfo(mypath); 

foreach (FileInfo fi in d.EnumerateFiles("*.jpg").OrderBy(x => x.Name)) 
      txtStatus.Text = txtStatus.Text + fi.Name + Environment.NewLine; 

這個我得到的結果是這樣的

banner-noche-estrellas-zacatecas2015.jpg 
banner-noche-estrellas-zacatecas2015_10.jpg 
banner-noche-estrellas-zacatecas2015_11.jpg 
banner-noche-estrellas-zacatecas2015_12.jpg 
banner-noche-estrellas-zacatecas2015_13.jpg 
banner-noche-estrellas-zacatecas2015_14.jpg 
banner-noche-estrellas-zacatecas2015_15.jpg 
banner-noche-estrellas-zacatecas2015_16.jpg 
banner-noche-estrellas-zacatecas2015_17.jpg 
banner-noche-estrellas-zacatecas2015_18.jpg 
banner-noche-estrellas-zacatecas2015_19.jpg 
banner-noche-estrellas-zacatecas2015_2.jpg 
banner-noche-estrellas-zacatecas2015_20.jpg 
banner-noche-estrellas-zacatecas2015_21.jpg 

我應該得到這樣的:

banner-noche-estrellas-zacatecas2015.jpg 
banner-noche-estrellas-zacatecas2015_2.jpg 
banner-noche-estrellas-zacatecas2015_3.jpg 

+0

這就是所謂的「自然排序」,它比簡單的排序要複雜得多,正如我在回答您的上一個問題時所解釋的那樣。你可以在[這個問題/答案]找到有用的東西(http://stackoverflow.com/questions/248603/natural-sort-order-in-c-sharp)。 – Steve

回答

0

你讓他們爲了。問題在於它們是字符串,所以你會按字符串順序獲取它們。

最直接的解決方案是重命名文件,使它們具有相同的數字位數。 banner-noche-estrellas-zacatecas2015_2.jpg - >banner-noche-estrellas-zacatecas2015_02.jpg

如果你這樣做,你的方法將工作。

如果您不想這樣做,那麼您需要在調用排序之前將該數字解析爲int。使用正則表達式來做到這一點。

+1

實際上,正則表達式可能是矯枉過正的。這會給你一個'int'來排序:'var sortOrder = int.Parse(「0」+ fi.Name.Replace(「banner-noche-estrellas-zacatecas2015」,「」).Replace(「_」 「」).Replace(fi.Extension,「」);' –