Directory.GetDirectories,按名称排序C#[复制](Directory.Get

2019-10-19 04:47发布

这个问题已经在这里有一个答案:

  • 如何将我的名字排序的文件列表,以匹配Windows资源管理器如何显示呢? 3个回答
  • C#如何使用Directory.GetFiles()来获取具有相同的顺序文件在Windows资源管理器? 7个回答

这听起来一个重复的,但考虑到没有满足由名称排序要求一个所有解决方案。 例如

J A1
J A2
J A3
J A10
J A11

该方法返回ĴA1,J A10,J A11,J A2,J A3。 但是,这并不如预期的操作系统以不同的方式对它们进行排序。

下面的解决方案已经尝试

var sorted = dirInfo.GetDirectories("*.*", SearchOption.TopDirectoryOnly).OrderBy(f => f.Name);

Array.Sort();

Answer 1:

感谢Baldrick的宝贵意见。 使用这种最终解决了这个问题。 可能还有其他的方式,但是这是我结束了。

 private void Walkdirectoryfulldepth(string dirPath, List<string> data)
        {
            DirectoryInfo dirInfo = new DirectoryInfo(dirPath);
            var sorted = dirInfo.GetDirectories("*.*", SearchOption.TopDirectoryOnly).ToList();
            DirectoryInfo[] subDirs = dirInfo.GetDirectories("*.*", SearchOption.TopDirectoryOnly);
            string[] strDir=new string[subDirs.Count()];
            int i =0;
            foreach (var item in subDirs)
            {
                strDir[i] = item.FullName;
                i++;
            }
             NumericComparer nc = new NumericComparer();
             Array.Sort(strDir, nc);
             foreach (var item in strDir)
            {
                data.Add(Path.GetFileName(item));
                Walkdirectoryfulldepth(item, data);
            }
            //foreach (var item in subDirs)
            //    Walkdirectoryfulldepth(item.FullName, data);

        }

获取下面类从CodeProject上实现类似于StrCmpLogicalW在Windows资源管理器API逻辑排序。

NumericComparer
StringLogicalComparer


文章来源: Directory.GetDirectories , Sort by name C# [duplicate]