C# Directory.GetFolder 排序文件夹并将它们设置为 List<> 而不会丢失内存并执行额外的排序操作

C# Directory.GetFolder Order Folders And Set Them To List<> Without Losing Memory And Doing Additional Sort Operations

只是想知道如何像在我的资源管理器文件夹中那样对文件夹进行排序 按名称排序..看起来像 :::

所以我尝试使用这个 :::

 DirectoryInfo sourcreInfo = new DirectoryInfo(SourcePath);
                DirectoryInfo[] sourceFolders = sourcreInfo.GetDirectories().OrderBy(p => p.Name).ToArray();

但可以肯定的是它不起作用...无法排序,此外它需要额外的内存...假设我的文件夹中有 1000 份报告...

soo ... 这里我是如何使用这个 sourceFolders::reportDir 的只是 List

  foreach (DirectoryInfo report in sourceFolders)
                {
                  reportDir.Add(Path.GetFileNameWithoutExtension(report.Name)).ToString()));      
                }

等待任何建议的人如何获得按名称目录排序...要正确执行此操作..:)

我使用 DirectoryInfo 得到的结果是什么 :::

我预计 :: report1、report2、report3、report4、report5 ....

按数字,如资源管理器图片所示

试试 EnumerateDirectories,像这样:

DirectoryInfo di = new DirectoryInfo("c:\windows");
List<DirectoryInfo> subDirs = di.EnumerateDirectories().OrderBy(d => d.Name).ToList();

编辑: 排序有效,就像您的示例一样,使用 EnumerateDirectories 只会更有效一点。排序是以文本而不是数字的形式进行的,因此 report2 将始终在 report1report11119 之后。因此,如果您希望它正确排序,请使用前导零,例如 report01report02...

要按编号订购,您必须像这样进行一些修改:

从报表名称中取第6个字母排序,将其转换为整数,然后排序。 在这种情况下,如果文件夹名称短于七个字符,如果第七个或任何后续字符不是数字(例如 rep1reports1reporting等)

DirectoryInfo di = new DirectoryInfo("c:\temp\reports");
List<DirectoryInfo> subDirs = 
    di.EnumerateDirectories()
        .OrderBy(d => int.Parse(d.Name.Substring(6))).ToList();