簡體   English   中英

我想在沒有遞歸的情況下獲取文件夾

[英]I want to get folders without recursion

我想在沒有遞歸的情況下獲取文件夾並將其打印到標准輸出。 我有使用遞歸的代碼。

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]);  
                }
            }
        }

如果您想在不使用遞歸函數的情況下獲取所有子目錄,您可以使用 Stack 來維護需要搜索的項目:

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();
}

您在 for 循環中遞歸調用WriteDirectories

您需要刪除行WriteDirectores(dirs[i]); .

您可以在此MSDN 文章中找到解決方案

訣竅是使用 SearchOption.AllDirectories 枚舉值作為最后一個參數

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM