首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >对特定文件夹中的文件进行数字排序

对特定文件夹中的文件进行数字排序
EN

Stack Overflow用户
提问于 2019-05-29 05:48:35
回答 4查看 97关注 0票数 -1

我有一个只包含.txt文件的文件夹。我希望我的输出具有特定的顺序。

每个文件名的前2位数字是它的唯一ID。我想按该顺序对文件进行数字排序

我已经研究了多个类似于Getting all file names from a folder using C#的问题

但没有人能帮助我实现这个目标。对我来说,获得所需输出的最简单方法是什么?

代码语言:javascript
复制
        string folder = @"C:\Testing\";
        var txtFiles = Directory.GetFiles(folder, "*.txt")
                                 .Select(Path.GetFileName)
                                 .ToList();
        foreach(var f in txtFiles)
        {
            Console.WriteLine(f);
        }
        Console.ReadKey();

窗口资源管理器

控制台输出

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2019-05-29 06:01:08

您可以只使用OrderBy linq语句并解析出文件名来获得您想要的内容。而且,如果您只想要一个简单的列表,比如IEnumerable,那么就不需要ToList()

例如:

代码语言:javascript
复制
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;
                         });
票数 1
EN

Stack Overflow用户

发布于 2019-05-29 06:38:21

这将用零填充第一个数字部分,以便于排序:

代码语言:javascript
复制
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); 
}
票数 2
EN

Stack Overflow用户

发布于 2019-05-29 06:13:48

更简单的替代方法是使用填充:

代码语言:javascript
复制
var txtFiles = Directory.EnumerateFiles(folder, "*.txt")
                        .Select(Path.GetFileName)
                        .OrderBy(s => s.PadLeft(11));
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56350465

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档