【问题标题】:Get all files in array order by name c# [duplicate]按名称c#按数组顺序获取所有文件[重复]
【发布时间】:2016-09-25 20:14:37
【问题描述】:

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  

等等

【问题讨论】:

  • 这称为“自然排序”,它比简单排序复杂得多,正如我在对您之前问题的回答中所解释的那样。你可以在this question/answers 中找到有用的东西。

标签: c# filelist


【解决方案1】:

您正在按顺序排列它们。问题是它们是字符串,所以你按字符串顺序获取它们。

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

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

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

【讨论】:

  • 实际上,正则表达式可能是矫枉过正。这将为您提供int 排序方式:var sortOrder = int.Parse("0" + fi.Name.Replace("banner-noche-estrellas-zacatecas2015", "").Replace("_", "").Replace(fi.Extension, "");
猜你喜欢
  • 1970-01-01
  • 2014-02-12
  • 1970-01-01
  • 2016-06-28
  • 1970-01-01
  • 2013-09-10
  • 1970-01-01
  • 2014-04-11
  • 1970-01-01
相关资源
最近更新 更多