【问题标题】:How to custom sort the return values of Directory.GetFiles()如何自定义对 Directory.GetFiles() 的返回值进行排序
【发布时间】:2016-01-18 16:25:52
【问题描述】:

我正在加载放置在字符串数组目录中的文件列表。我正在使用System.IO.Directory.GetFiles()

String[] path = Directory.GetFiles(batchElements[j].DocIdPath, "*.csv", SearchOption.AllDirectories);

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

  • 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

感谢帮助。

【问题讨论】:

  • 那么我建议你实施一个能够发现这一点的比较。请注意,您应该能够对其进行编码和测试,而无需参考Directory.GetFiles
  • 文件的第一部分是否始终是“2713_CFPB 结算成本手册_2713_”?或者我们可以算出数字部分永远是最后一个吗?

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


【解决方案1】:

你可以这样做:

  • 仅使用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() 附加到查询中。

【讨论】:

    猜你喜欢
    • 2013-08-17
    • 2022-07-11
    • 1970-01-01
    • 2016-06-22
    • 1970-01-01
    • 2012-09-22
    • 1970-01-01
    • 1970-01-01
    • 2016-08-09
    相关资源
    最近更新 更多