我想获取没有递归的文件夹

时间:2017-01-22 11:45:58

标签: c#

我想获取没有递归的文件夹并将其打印到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]);  
                }
            }
        }

3 个答案:

答案 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枚举值作为最后一个参数