代码之家  ›  专栏  ›  技术社区  ›  Fede E.

c从x开始按名称排列目录

  •  1
  • Fede E.  · 技术社区  · 6 年前

    我需要在另一个目录中获取目录,但只需要那些“在”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 回复  |  直到 6 年前
        1
  •  2
  •   Tamir Vered    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 other overloads

        2
  •  1
  •   Olivier Jacot-Descombes    6 年前

    Where

    foreach(string path in Directory
               .GetDirectories("/root/")
               .Where(d => String.Compare(Path.GetFileName(d), "DirectoryC") > 0))
    {
        Console.WriteLine(path);
    }
    

        3
  •  0
  •   Or Yaacov    6 年前

    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;
                        }
                    }
                }