2012-04-27 77 views
2

我列出了一個控制檯應用程序中的所有目錄,但它需要10分鐘以上的時間(假設這裏可能需要10分鐘以上),我知道有很多目錄,但是10分鐘以上開始太久了?是否有可能加快這種遞歸目錄方法?

class Program 
    { 
     static void Main(string[] args) 
     { 
      DirSearch(@"c:\"); 

      Console.ReadKey(); 
     } 

     static void DirSearch(string sDir) 
     { 
      try 
      { 
       foreach (string d in Directory.GetDirectories(sDir)) 
       { 
        Console.WriteLine(d); 
        DirSearch(d); 
       } 
      } 
      catch (System.Exception excpt) 
      { 
       Console.WriteLine(excpt.Message); 
      } 
     } 
    } 
+0

調試版本而不是版本? – RvdK 2012-04-27 14:59:40

+5

是不是大部分時間都花在寫控制檯上?如果你刪除該行,不是即時的。 – 2012-04-27 15:00:18

回答

10

是的 - 不要手動遞歸。這是內置的,你可以使用SearchOption.AllDirectories包括在你的搜索所有子目錄:

foreach (string d in Directory.GetDirectories(sDir, "*.*", SearchOption.AllDirectories)) 
{ 
    Console.WriteLine(d); 
} 

或者選擇使用Directory.EnumerateDirectories它產生的目錄名稱,因爲它找到它們,而不是把所有的人都在一個數組首先:

foreach (string d in Directory.EnumerateDirectories(sDir, "*.*", SearchOption.AllDirectories)) 
{ 
    Console.WriteLine(d); 
} 
+0

這似乎缺少一個SearchPattern參數。當我這樣做時:Directory.GetDirectories(sDir,「*」,SearchOption.AllDirectories),什麼也沒有顯示。 – Xaisoft 2012-04-27 15:05:19

+0

@ Xaisoft:謝謝,修正 – BrokenGlass 2012-04-27 15:09:11

+0

我猜Directory.GetDirectories仍然需要一段時間,因爲正如你所說,它首先將它放入數組列表中,然後纔開始枚舉它們,因此,您對EnumerateDirectories的建議是正確的? – Xaisoft 2012-04-27 15:15:27