[英]C# Sorting Directory.GetFiles() by name without extension
我正在尝试获取目录中文件的排序列表。 此文件具有不同的扩展名。
foreach (String File in Directory.GetFiles(directory, "*").OrderBy(f => f))
{
stringA[i] = File;
i++;
}
问题是结果没有像我预期的那样排序。 这是我在“stringA”中获得的:
1.txt
10.txt
11.png
12.png
18.png
19.txt
2.txt
21.png
22.png
23.png
24.png
25.txt
26.txt
27.txt
28.txt
29.txt
3.png
30.txt
31.txt
32..png
33..png
34..png
35.png
4.txt
40.txt
41.png etc
我想要的是:1.txt, 2.txt, 3.png, 4.txt, 5.png, 6.txt, 7, 8, 9, 10 , 11, 19, 20, 21, 29, 30.. .
我能做什么?
var files = Directory.GetFiles(directory, "*")
.Select(file => new { FileName = file, FileNumber = long.Parse(Path.GetFileNameWithoutExtension(file)) })
.OrderBy(data => data.FileNumber);
foreach( file in files )
{
Console.WriteLine("{0} (Number: {1})", file.FileName, FileNumber)
}
请注意,这省略了您可能需要的任何错误处理。
这称为字母数字排序。 对于一般的自定义排序,请使用适合您需要的自定义比较方法实现 IComparer 接口。
对于字母数字,Dotnetpearls 有一个很好的例子和实现: http : //www.dotnetperls.com/alphanumeric-sorting 。
复制 AlphanumComparatorFast 类,然后像这样使用它:
var list = Directory.GetFiles(directory);
Array.Sort(list, new AlphanumComparatorFast());
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.