gpt4 book ai didi

c# - 获取目录中按名称排序的文件列表

转载 作者:行者123 更新时间:2023-12-02 14:06:20 24 4
gpt4 key购买 nike

我需要从目录中获取按名称排序的文件列表。

我的文件命名为:

TestFile_1.xml,
TestFile_2.xml
TestFile_3.xml
.
.
TestFile_10.xml
TestFile_11.xml

我使用下面的代码片段进行排序

DirectoryInfo di = new DirectoryInfo(jsonFileInfo.FolderPath);
FileSystemInfo[] files = di.GetFileSystemInfos();
var orderedFiles = files.OrderBy(f => f.Name);`

通过这个片段,我得到的结果为

TestFile_1.xml,
TestFile_10.xml
TestFile_11.xml
.
.
TestFile_2.xml
TestFile_3.xml
.
.

如何排序?

最佳答案

名称是一个字符串,“10”不大于大于“2”。如果要按下划线后的数字排序:

var orderedFiles = files
.Select(f => new{
File = f,
NumberPart = f.Name.Substring(f.Name.IndexOf("_") + 1)
})
.Where(x => x.NumberPart.All(Char.IsDigit))
.Select(x => new { x.File, Number = int.Parse(x.NumberPart) })
.OrderBy(x => x.Number)
.Select(x => x.File);

如果您想包含所有不以数字结尾的文件,那么这些文件应该排在前面:

orderedFiles = files
.Select(f => new
{
File = f,
NumberPart = f.Name.Substring(f.Name.IndexOf("_") + 1)
})
.Select(x => new { x.File, x.NumberPart, AllDigit = x.NumberPart.All(Char.IsDigit) })
.Select(x => new
{
x.File,
Number = x.AllDigit ? int.Parse(x.NumberPart) : (int?)null
})
.OrderBy(x => x.Number.HasValue)
.ThenBy(x => x.Number ?? 0)
.Select(x => x.File);

如果您甚至希望静态文件名始终位于顶部(如注释所示),您可以使用:

....
.OrderByDescending(x => x.File.Name.Equals("TestFile_cover.xml", StringComparison.CurrentCultureIgnoreCase))
.ThenBy(x => x.Number.HasValue)
.ThenBy(x => x.Number ?? 0)
.Select(x => x.File);

关于c# - 获取目录中按名称排序的文件列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26144189/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com