2017-01-22 65 views
-2

我想獲取沒有遞歸的文件夾並將其打印到標準輸出。 我有使用遞歸的代碼。我想獲得沒有遞歸的文件夾

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

'我不明白'是什麼意思?它從最終結果中錯過了嗎?引發與訪問權限有關的異常? – Alexei

回答

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

在這段代碼中我得到所有文件夾,至少在testfolder中。在testfolder3是一個文件夾,我無法得到它。 – refreshg

+0

是的,它不適合您不允許閱讀的文件夾。像Windows中的一些文件夾一樣。 – Alexei

0

您在for循環中遞歸調用WriteDirectories

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

+0

是的,但任務是不必使用間接遞歸和參數SearchOption.AllDirectories – refreshg

0

你會發現在這個MSDN-arcticle

訣竅是,如果你想獲得的所有子目錄不使用遞歸函數使用SearchOption.AllDirectories枚舉值作爲最後一個參數

+0

是的但任務是不必使用間接遞歸和參數SearchOption.AllDirectories – refreshg

相關問題