首页 > 解决方案 > 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)) ??

标签: c#linqdirectory

解决方案


您可以使用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取决于文化,您可以使用其他重载来自定义其行为。


推荐阅读