Directory.GetDirectories,按名称排序C#

时间:2014-01-13 04:49:44

标签: c# .net-3.5 directoryinfo

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

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();

1 个答案:

答案 0 :(得分:0)

感谢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