繁体   English   中英

C# 按名称排序 Directory.GetFiles() 没有扩展名

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM