我有一个只包含.txt文件的文件夹。我希望我的输出具有特定的顺序。
每个文件名的前2位数字是它的唯一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();
窗口资源管理器
控制台输出
发布于 2019-05-29 06:01:08
您可以只使用OrderBy linq语句并解析出文件名来获得您想要的内容。而且,如果您只想要一个简单的列表,比如IEnumerable
,那么就不需要ToList()
。
例如:
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;
});
发布于 2019-05-29 06:38:21
这将用零填充第一个数字部分,以便于排序:
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);
}
发布于 2019-05-29 06:13:48
更简单的替代方法是使用填充:
var txtFiles = Directory.EnumerateFiles(folder, "*.txt")
.Select(Path.GetFileName)
.OrderBy(s => s.PadLeft(11));
https://stackoverflow.com/questions/56350465
复制相似问题