我有一个仅包含.txt文件的文件夹。我希望我的输出具有一定顺序。
每个文件名的前两位数字是其唯一ID。我想按顺序对文件进行数字排序
我研究了多个类似的问题 Getting all file names from a folder using C#
,但是没有一个因素帮助我实现了这一目标。获得所需输出的最简单方法是什么?
string folder = @"C:\Testing\";
var txtFiles = Directory.GetFiles(folder, "*.txt")
.Select(Path.GetFileName)
.ToList();
foreach(var f in txtFiles)
{
Console.WriteLine(f);
}
Console.ReadKey();
Windows Explore
控制台输出
答案 0 :(得分:2)
这会在第一个数字部分填充零以进行排序:
string folder = @"C:\Testing";
var txtFiles = Directory.GetFiles(folder, "*.txt")
.Select(Path.GetFileName)
.OrderBy(f => f.Split('_')[0].PadLeft(5, '0'));
foreach (var f in txtFiles)
{
Console.WriteLine(f);
}
答案 1 :(得分:1)
您可以只使用OrderBy linq语句并解析出文件名以获得所需的内容。另外,如果您只需要一个简单的列表(例如ToList()
),就不需要IEnumerable
。
例如:
var txtFiles = Directory.EnumerateFiles(folder, "*.txt")
.Select(Path.GetFileName)
.OrderBy(file =>
{
string[] nameParts = file.Split('_');
if (nameParts.Length > 0)
{
int sortValue;
if (int.TryParse(nameParts[0], out sortValue))
{
return sortValue;
}
}
return 0;
});
答案 2 :(得分:1)
更容易的替代方法是使用padding:
var txtFiles = Directory.EnumerateFiles(folder, "*.txt")
.Select(Path.GetFileName)
.OrderBy(s => s.PadLeft(11));
答案 3 :(得分:-1)
如果需要,可以对其进行更好的排序。使用.OrderBy扩展方法。
string folder = @"C:\Testing\";
var txtFiles = Directory.GetFiles(folder, "*.txt")
.Select(Path.GetFileName)
.OrderBy(x => x)
.ToList();
foreach (var f in txtFiles)
{
Console.WriteLine(f);
}
Console.ReadKey();