我想获取没有递归的文件夹并将其打印到stdout。 我有使用递归的代码。
static void Main(string[] args) {
WriteDirectories(@"C:\Intel");
Console.ReadKey();
}
static void WriteDirectories(string path) {
string[] dirs = Directory.GetDirectories(path/*, "*", SearchOption.AllDirectories*/);
for(int i = 0; i < dirs.Length; i++) {
Console.WriteLine(dirs[i]);
WriteDirectories(dirs[i]);
}
}
有人可以帮助我在不使用递归的情况下获取文件夹吗?
在这段代码中,我得到了所有处于testfolder的文件夹。在testfolder3中是一个文件夹,我无法得到它。
static void WriteDirectories(string path)
{
string[] dirs = Directory.GetDirectories(path/*, "*", SearchOption.AllDirectories*/);
for (int i = 0; i < dirs.Length; i++)
{
Console.WriteLine(dirs[i]);
for (int j = 0; j < dirs[i].Length; j++)
{
break;
string[] dirs1 = Directory.GetDirectories(dirs[i]);
Console.WriteLine(" " + dirs1[j]);
}
}
}
答案 0 :(得分:1)
如果要在不使用递归函数的情况下获取所有子目录,可以使用堆栈来维护需要搜索的项目:
static void WriteDirectoriesInternal(Stack<string> stack)
{
while (stack.Count > 0)
{
var currDir = stack.Pop();
Console.WriteLine(currDir);
foreach (var item in Directory.GetDirectories(currDir))
stack.Push(item);
}
}
static void WriteDirectories(string path)
{
Stack<string> directoryStack = new Stack<string>();
directoryStack.Push(path);
WriteDirectoriesInternal(directoryStack);
}
public static void Main(String[] args)
{
WriteDirectories("D:\\Program Files (x86)");
Console.ReadLine();
}
答案 1 :(得分:0)
您在for循环中递归调用WriteDirectories
。
您需要删除行WriteDirectores(dirs[i]);
。
答案 2 :(得分:0)
您可以在此MSDN-arcticle
中找到解决方案诀窍是使用SearchOption.AllDirectories枚举值作为最后一个参数