c# - C# 获取从 X 开始按名称排序的目录
问题描述
我需要获取另一个目录中的目录,但只有那些“在”X 之后按目录名称排序的目录。
例子:
-Root
|--DirectoryA
|--DirectoryB
|--DirectoryC
|--DirectoryD
所以基本上是这样的:
foreach(string path in Directory.GetDirectories("/root/"))
{
Console.WriteLine(path);
}
输出:
/root/DirectoryA
/root/DirectoryB
/root/DirectoryC
/root/DirectoryD
但我实际上只需要得到 C 之后的那些(包括它),我想用 Linq 应该不会太难,但我真的看不出怎么做。
也许是这样的:
Directory.GetDirectories("/root/").OrderByDescending(dirName =>
Path.GetDirectoryName(dirName)) ??
解决方案
您可以使用SkipWhile
,假设顺序是字母顺序:
foreach(string path in Directory.GetDirectories("/root/")
.Select(dir => Path.GetFileName(dir))
.SkipWhile(dir => string.Compare(dir, "DirectoryC") < 0)
{
Console.WriteLine(path);
}
这样,您将避免在遇到第一个有效目录后进行冗余过滤。
如果您只想获取文件夹,然后DirectoryC
可以使用TakeWhile
:
foreach(string path in Directory.GetDirectories("/root/")
.Select(dir => Path.GetFileName(dir))
.TakeWhile(dir => string.Compare(dir, "DirectoryC") < 0)
{
Console.WriteLine(path);
}
请注意,这string.Compare
取决于文化,您可以使用其他重载来自定义其行为。