这个听起来是重复的,但是给出的所有解决方案都不能满足按名称排序的其中一个要求。例如
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();发布于 2014-01-13 14:09:45
感谢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);
}从实现类似于windows explorer API中的StrCmpLogicalW逻辑排序的codeproject中获取以下类。
NumericComparer
StringLogicalComparerhttps://stackoverflow.com/questions/21084096
复制相似问题