c# System.IO 如何找到给定某个文件夹的所有子文件夹?
c# System.IO how do i find all the subfolders given a certain folder?
这是我目前所做的:
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();
}
}
这给了我指定文件夹的第一个子文件夹,问题是我需要找到指定文件夹中的所有子文件夹、子子文件夹、子子文件夹等和文件,然后用这个输出它们缩进:
- 子文件夹1
- 子子文件夹1
- SubSubSubfolder1
- 子子文件夹文件 1
- 子文件夹 2
- 子文件夹2
- 子文件夹文件 1
我已经尝试了很多次,但我不知道怎么做,也许我遗漏了一些命令(这是我第一次用 c# 编程 System.IO)
你能给我一些提示或告诉我应该使用什么命令吗?我要疯了。
您应该使用 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();
}
为了遍历所有子文件夹,您需要递归函数。基本上,您必须将当前仅适用于根目录的过程重复到您遇到的所有目录。
编辑:不得不花一点时间来提供这个代码示例:
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
加一。
这是遍历树状结构的一种相当标准的方法。
这是我目前所做的:
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();
}
}
这给了我指定文件夹的第一个子文件夹,问题是我需要找到指定文件夹中的所有子文件夹、子子文件夹、子子文件夹等和文件,然后用这个输出它们缩进:
- 子文件夹1
- 子子文件夹1
- SubSubSubfolder1
- 子子文件夹文件 1
- 子文件夹 2
- 子子文件夹1
- 子文件夹2
- 子文件夹文件 1
我已经尝试了很多次,但我不知道怎么做,也许我遗漏了一些命令(这是我第一次用 c# 编程 System.IO) 你能给我一些提示或告诉我应该使用什么命令吗?我要疯了。
您应该使用 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();
}
为了遍历所有子文件夹,您需要递归函数。基本上,您必须将当前仅适用于根目录的过程重复到您遇到的所有目录。
编辑:不得不花一点时间来提供这个代码示例:
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
加一。
这是遍历树状结构的一种相当标准的方法。