为了账号安全,请及时绑定邮箱和手机立即绑定

C# 获取从 X 开始按名称排序的目录

C# 获取从 X 开始按名称排序的目录

C#
慕侠2389804 2021-11-07 19:08:17
我需要获取另一个目录中的目录,但只有那些在 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)) ??
查看完整描述

3 回答

?
跃然一笑

TA贡献1826条经验 获得超6个赞

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


查看完整回答
反对 回复 2021-11-07
?
翻过高山走不出你

TA贡献1875条经验 获得超3个赞

使用Where扩展方法


foreach(string path in Directory

           .GetDirectories("/root/")

           .Where(d => String.Compare(Path.GetFileName(d), "DirectoryC") > 0))

{

    Console.WriteLine(path);

}

如果需要,您还可以包含一个排序,但它不会影响使用Where. 如果你这样做了,Where为了效率,把它附加在后面。


查看完整回答
反对 回复 2021-11-07
?
繁华开满天机

TA贡献1816条经验 获得超4个赞

或者以防万一您使用的是旧版本的 .NET,您总是可以自己编写逻辑:


var directories = Directory.GetDirectories("C:\\").OrderByDescending(r => r).ToArray();

            if (directories != null && directories.Length > 0)

            {

                for (int i = 0, Cindex=-1; i < directories.Length; i++)

                {

                    if (Cindex > 0)

                    {

                        Console.WriteLine(directories[i]);

                        continue;

                    }

                    if (directories[i] == "DirectoryC")

                    {

                        Cindex = i;

                    }

                }

            }


查看完整回答
反对 回复 2021-11-07
  • 3 回答
  • 0 关注
  • 293 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信