我正在尝试不使用SearchOption.AllDirectories而仅使用Directory.GetDirectories来打印每个子目录,为此我正在使用递归。我的主要问题是打印出每个子目录,在其前面有两个空格,如下所示:

1
  1,1
    1,1,1
2
  2,1
3
etc...

    class Program
{

    static void Main(string[] args)
    {

        string path = @"D:\Heaven Benchmark 4.0";
        WriteDirectories(path);

        Console.ReadKey();

    }
    static void WriteDirectories(string path)
    {
        string[] dirs = Directory.GetDirectories(path/*, "*", SearchOption.AllDirectories*/);
        for (int i = 0; i < dirs.Length; i++)
        {
            Console.Write(dirs[i] + "\n");
            if (Directory.GetDirectories(dirs[i]).Length > 0)
            {
                Console.Write("  "); WriteDirectories(dirs[i]);continue;
            }
        }
    }
}

最佳答案

我不了解C#,因此某些语法可能是错误的,但是您可以执行以下操作

static void WriteDirectories(string path, int level)
{
    string[] dirs = Directory.GetDirectories(path/*, "*", SearchOption.AllDirectories*/);
    for (int i = 0; i < dirs.Length; i++)
    {
        int l = level;
        while (l > 0) {
            Console.Write("  ");
            l -= 1;
        }
        Console.Write(dirs[i] + "\n");
        if (Directory.GetDirectories(dirs[i]).Length > 0)
        {
            WriteDirectories(dirs[i], level + 1);continue;
        }
    }
}


在您的初始通话中,只需将0传递给级别即可。或者,如果您不想公开此内容,请创建一个具有此功能的私有帮助器函数,并使面向公众的功能仅接受以0表示的级别调用此路径。

10-08 14:22