如何自定义排序 Directory.GetFiles() 的 return 值
How to custom sort the return values of Directory.GetFiles()
我正在加载放置在字符串数组中目录中的文件列表。我正在使用 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
感谢帮助。
你可以这样做:
- 仅使用
Path.GetFileNameWithoutExtension
获取文件名
- 根据
_
拆分它们
- 获取最后一项
- 使用
int.Parse
或int.TryParse
解析
- 在
OrderBy
中使用该值与 LINQ
代码:
var output = path.OrderBy(p =>
int.TryParse(Path.GetFileNameWithoutExtension(p).Split('_').Last(), out temp) ?
temp : int.MaxValue);
如果您需要数组或 List<T>
作为输出,请将 ToArray()
或 ToList()
附加到查询。
我正在加载放置在字符串数组中目录中的文件列表。我正在使用 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
感谢帮助。
你可以这样做:
- 仅使用
Path.GetFileNameWithoutExtension
获取文件名
- 根据
_
拆分它们
- 获取最后一项
- 使用
int.Parse
或int.TryParse
解析
- 在
OrderBy
中使用该值与 LINQ
代码:
var output = path.OrderBy(p =>
int.TryParse(Path.GetFileNameWithoutExtension(p).Split('_').Last(), out temp) ?
temp : int.MaxValue);
如果您需要数组或 List<T>
作为输出,请将 ToArray()
或 ToList()
附加到查询。