以空格开始新行

本文关键字:新行 开始 空格 | 更新日期: 2023-09-27 18:24:27

我陷入了这个问题,如果有人能帮我解决这个问题,我将不胜感激。

  1. 我想为下面这样的格式的子文件夹添加空间。(必须使用递归)
  2. 我想为下面这样的格式的子文件夹添加空间。(它必须使用递归)

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.IO;
    namespace G14_211115
    {
         class Program
         {
               static void Main(string[] args)
               {
                    string path = @"C:'Program Files'FinchVPN";
                    WriteDirectories(path);
                    Console.ReadKey();
               }
               /* Tasks.
               * 1. I want to add spaces for subfolder like this format down below. ( it must be done with recursion) 
               *    Like this
               *    --------------------------------------------------------------
               *    Folder 1
               *      Folder 1.1
               *      Folder 1.2
               *    Folder 2
               *      Folder 2.1
               *        Folder 2.1.1
               *      Folder 2.2
               *    Folder 3
               *    Folder 4
               *   
                * 2. Task 2 I want to retype this code without using recurrence and C# inbuilt functions.
               */
               static void WriteDirectories(string path)
               {
                    string[] dirs = Directory.GetDirectories(path);
                    for(int i = 0; i < dirs.Length; i++)
                    {
                         Console.WriteLine(dirs[i]); 
                         WriteDirectories(dirs[i]);
                    }
              }
         }
    }
    

以空格开始新行

在递归调用WriteDirectories时,可以向每个调用传递一个变量,指示(recursion)level。使用它,您可以在输出之前放置一些空格。

因此,您需要这样修改您的代码:

static void WriteDirectories(string path, int level = 0)
{
    string[] dirs = Directory.GetDirectories(path);
    for (int i = 0; i < dirs.Length; i++)
    {
        for (int j = 0; j < level; j++)
        {
            Console.Write(" ");
        }
        Console.WriteLine(dirs[i]);
        WriteDirectories(dirs[i], (level + 1));
    }
}

如果每个级别只需要一个以上的空格,您可以简单地修改内部循环,j < 2 * level将为每个级别提供2个空格字符,依此类推

更新(感谢David)

您可以使用new string(' ', level)来创建一个包含指定字符level-times的新字符串,而不是使用内部循环。

因此,内部的for-环路将被Console.Write(new string(' ', level));所取代。

只需为递归调用提供一个深度参数,并根据深度添加空格。

       static void WriteDirectories(string path, int depth) {
            string[] dirs = Directory.GetDirectories(path);
            for(int i = 0; i < dirs.Length; i++) {
                 string preSpaces = new String(' ',depth);
                 Console.WriteLine(preSpaces + dirs[i]); 
                 WriteDirectories(dirs[i], depth+1);
            }
       }

您的第一个调用应提供0或1作为深度。