按名称c#按数组顺序获取所有文件

Get all files in array order by name c#

string mypath = txtPath.Text;

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  

等等

您正在整理它们。问题是它们是字符串,因此您按字符串顺序获取它们。

最直接的解决方案是重命名您的文件,使它们具有相同的位数,例如banner-noche-estrellas-zacatecas2015_2.jpg -> banner-noche-estrellas-zacatecas2015_02.jpg

如果你这样做,你的方法就会奏效。

如果您不想这样做,则需要在调用排序之前将该数字解析为 int。使用正则表达式来做到这一点。