这是我到目前为止所做的:
class Program
{
static void Main(string[] args)
{
DirectoryInfo startDirectory = new DirectoryInfo(@"C:\Users\Angelo\Desktop\ExerciseTest");
string output = "";
DirectoryInfo[] subDirectoryes = startDirectory.GetDirectories();
for (int i = 0; i < subDirectoryes.Length; i++)
{
output = output + subDirectoryes[i].ToString() + "\r\n";
}
Console.WriteLine(output);
Console.ReadLine();
}
}
这给了我结果指定文件夹的第一个子文件夹,问题是我需要找到指定文件夹中的所有子文件夹,子子文件夹,子子文件夹等文件,然后用这个缩进输出它们:
我一直试图多次这样做,但我无法弄清楚如何,也许我错过了一些命令(这是我第一次用c#System.IO编程) 你可以给我一些提示或告诉我应该使用哪些命令吗?我疯了。
答案 0 :(得分:2)
您应该使用an overload of GetDirectories
来定义搜索范围:
DirectoryInfo[] subDirectoryes =
startDirectory.GetDirectories("*", SearchOption.AllDirectories);
这将获取所有目录,包括所有子目录。
第一个参数是搜索文本过滤器,“*”将查找所有文件夹。
缩进的完整示例:
void Main()
{
var path = @"C:\Users\Angelo\Desktop\ExerciseTest";
var initialDepth = path.Split('\\').Count();
DirectoryInfo startDirectory = new DirectoryInfo(path);
StringBuilder sb = new StringBuilder();
DirectoryInfo[] subDirectoryes = startDirectory.GetDirectories("*", SearchOption.AllDirectories);
for (int i = 0; i < subDirectoryes.Length; i++)
{
var level = subDirectoryes[i].FullName.Split('\\').Count() - initialDepth;
sb.AppendLine($"{new string('\t', level)}{subDirectoryes[i].Name}");
}
Console.WriteLine(sb.ToString());
Console.ReadLine();
}
答案 1 :(得分:0)
要浏览所有子文件夹,您需要递归函数。基本上,您必须重复当前仅针对根目录应用于您遇到的所有目录的过程。
编辑:不得不花一点时间来提供此代码示例:
class Program
{
static void Main(string[] args)
{
var basePath = @"C:\Users\Angelo\Desktop\ExerciseTest";
DirectoryInfo startDirectory = new DirectoryInfo(basePath);
IterateDirectory(startDirectory, 0);
Console.ReadLine();
}
private static void IterateDirectory(DirectoryInfo info, int level)
{
var indent = new string('\t', level);
Console.WriteLine(indent + info.Name);
var subDirectories = info.GetDirectories();
foreach(var subDir in subDirectories)
{
IterateDirectory(subDir, level + 1);
}
}
}
有点解释,IterateDirectory的作用(按要求):
IterateDirectory
方法,level
增加1。这是一种通过树状结构的相当标准的方法。