【问题标题】:Directory.GetDirectories , Sort by name C# [duplicate]Directory.GetDirectories ,按名称排序 C# [重复]
【发布时间】:2014-01-31 18:34:57
【问题描述】:

这听起来很重复,但给出的所有解决方案都不满足按名称排序的要求之一。比如

J A1
J A2
J A3
J A10
J A11

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

以下解决方案已经尝试过

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

Array.Sort();

【问题讨论】:

标签: c# .net-3.5 directoryinfo


【解决方案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 获取以下类,其实现类似于 Windows 资源管理器 API 中的StrCmpLogicalW 逻辑排序。

NumericComparer
StringLogicalComparer

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-11
    • 1970-01-01
    • 2013-07-21
    • 2018-03-26
    相关资源
    最近更新 更多