我遇到了这个问题如果有人可以帮我解决这个问题,我真的很感激。
我想在下面添加像这种格式的子文件夹空间。(它 必须用递归完成)
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]);
}
}
}
}
答案 0 :(得分:6)
当您以递归方式呼叫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个空格字符,依此类推。
更新(感谢大卫)
您可以使用new string(' ', level)
代替内部循环来创建包含指定字符level
的新字符串 - 次。
因此内部for
- 循环将被Console.Write(new string(' ', level));
替换。
答案 1 :(得分:0)
只需为递归调用提供深度参数,并根据深度添加空格。
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深度。