如何自定义Directory.GetFiles()的返回值的排序

时间:2016-01-18 16:25:52

标签: c# sorting directory getfiles system.io.file

我正在加载一个放在字符串数组目录中的文件列表。我正在使用sed -i.bak '/ title="Main Menu"/!s/ title="[^"]*"//' file.xml cat file.xml </GlobalMenu> <Buttons> <Button name="salford_121"/> <Button name="salford_197"/> <Button name="salford_121"/> <Button name="salford_190"/> <Button name="salford_121"/> <Button name="GlobalMenu.xml" title="Main Menu"/> </Buttons> </GlobalMenu>

System.IO.Directory.GetFiles()

我假设返回值的默认排序顺序是名称。所以我的文件按以下顺序加载。

  • 2713_CFPB结算费用Booklet_2713_1.csv
  • 2713_CFPB结算费用Booklet_2713_10.csv
  • 2713_CFPB结算费用Booklet_2713_11.csv
  • 2713_CFPB结算费用Booklet_2713_2.csv
  • 2713_CFPB结算费用Booklet_2713_3.csv
  • 2713_CFPB结算费用Booklet_2713_4.csv
  • 2713_CFPB结算费用Booklet_2713_5.csv
  • 2713_CFPB结算费用Booklet_2713_6.csv
  • 2713_CFPB结算费用Booklet_2713_7.csv
  • 2713_CFPB结算费用Booklet_2713_8.csv
  • 2713_CFPB结算费用Booklet_2713_9.csv

但我希望按此顺序收集值。

  • 2713_CFPB结算费用Booklet_2713_1.csv
  • 2713_CFPB结算费用Booklet_2713_2.csv
  • 2713_CFPB结算费用Booklet_2713_3.csv
  • 2713_CFPB结算费用Booklet_2713_4.csv
  • 2713_CFPB结算费用Booklet_2713_5.csv
  • 2713_CFPB结算费用Booklet_2713_6.csv
  • 2713_CFPB结算费用Booklet_2713_7.csv
  • 2713_CFPB结算费用Booklet_2713_8.csv
  • 2713_CFPB结算费用Booklet_2713_9.csv
  • 2713_CFPB结算费用Booklet_2713_10.csv
  • 2713_CFPB结算费用Booklet_2713_11.csv

感谢帮助。

1 个答案:

答案 0 :(得分:4)

你可以这样做:

  • 仅使用Path.GetFileNameWithoutExtension
  • 获取文件名
  • 根据_
  • 拆分它们
  • 获取最后一项
  • 使用int.Parseint.TryParse
  • 解析它
  • OrderBy和LINQ
  • 中使用该值

代码:

var output = path.OrderBy(p => 
                        int.TryParse(Path.GetFileNameWithoutExtension(p).Split('_').Last(), out temp) ?
                        temp : int.MaxValue);

如果您需要数组或List<T>作为输出,请将ToArray()ToList()附加到查询中。