2013-08-22 40 views
1

這是我的職責誰搜索文件從給定的路徑:繼續捕獲訪問路徑異常後搜索

static void dirSearch(string dir) 
{ 
    try 
    { 
     foreach (string item in Directory.GetDirectories(dir)) 
     { 
      Console.WriteLine(item); 
      foreach (string str in Directory.GetFiles(item)) 
      { 
       Console.WriteLine("\t" + str); 
      } 
     } 
    } 
    catch (Exception ex) 
    { 
     Console.WriteLine(ex.Message); 
    } 
} 

爲什麼趕後異常的功能停止,而不是繼續給我看我的文件,其餘從權限的文件夾?

回答

3

該函數在捕獲異常之後停止,因爲try/catch在循環之外。將它移到循環中以獲得所需的效果:

static void dirSearch(string dir) 
{ 
    foreach (string item in Directory.GetDirectories(dir)) 
    { 
     Console.WriteLine(item); 
     try 
     { 
      foreach (string str in Directory.GetFiles(item)) 
      { 
       Console.WriteLine("\t" + str); 
      } 
     } 
     catch (Exception ex) 
     { 
      Console.WriteLine(ex.Message); 
     } 
    } 
} 

請注意,此功能將僅搜索目錄的一個級別。如果你想遞歸搜索,你需要調用dirSearch每個你找到的目錄,如:

static void dirSearch(string dir) 
{ 
    Console.WriteLine(dir); 
    foreach (string item in Directory.GetDirectories(dir)) 
    { 
     try 
     { 
      dirSearch(item); 
     } 
     catch (Exception ex) 
     { 
      Console.WriteLine(ex.Message); 
     } 
    } 
    foreach (string str in Directory.GetFiles(dir)) 
    { 
     Console.WriteLine("\t" + str); 
    } 
} 
+0

,我需要把dirSearch電話嗎? – user2214609

+0

有什麼不對,第二個foreach需要的可能是其他地方? – user2214609

+0

@ user2214609你能看到有什麼問題嗎?這是一個簡單的複製/粘貼錯誤。如果你可以在不看我的編輯的情況下搞清楚,你就明白了這個方法。 – dasblinkenlight