2010-10-07 51 views
0

我已經看到了這個代碼(以及類似的)所有網站上的名單,但我不能得到它的工作。每當我一行一行地調試它時,它就會打破調試並加載應用程序。不會顯示錯誤消息,並且「錯誤」行後的任何代碼仍未處理。C#中無法獲得子目錄

這裏是有問題的代碼:

foreach (string folder in allFolders) 
{ 
    string[] subFolders = Directory.GetDirectories(folder, 
     "*", SearchOption.AllDirectories); 
    MessageBox.Show("Test"); 
} 

foreach循環訂立,但永遠不會顯示消息框。

如果我刪除SearchOption.AllDirectories代碼處理成功,但我需要一些方法,包括所有子目錄內的目錄。

任何想法?

+0

您是否嘗試過調試此代碼?字符串[]是否被填充? – Younes 2010-10-07 07:19:48

+0

你能提供一個完整的,可執行的程序(用'Main'方法)來說明這個問題嗎? – 2010-10-07 07:34:01

回答

1

你的代碼適合我。
在我看來,這種方法調用只需要很多時間來執行。例如,如果在所有文件夾中存在根目錄,則必須等待幾分鐘(取決於您的系統參數)。你有沒有在只有少數幾個嵌套目錄的目錄上檢查這個代碼片段?
我認爲,你在winforms中工作並且執行沒有達到MessageBox.Show調用。

+1

謝謝,我有一種感覺是這個問題。我在一個只有少量文件夾的文件夾上試過它,它似乎工作。我想我的原始文件夾中有更多的子文件夾比我想象的要多! – 2010-10-07 07:38:36

+0

即使離開它幾分鐘後,消息框仍然不顯示。是否有可能因爲大量的子文件夾,此代碼永遠不會工作(儘管不會產生錯誤)? – 2010-10-07 07:44:14

+0

我不認爲這是可能的。您應該考慮到此方法可能需要很長時間才能執行。只是比較執行時間:嘗試使用此通配符掩碼從根目錄運行操作系統嵌入式搜索並查看該搜索運行多長時間。 – 2010-10-07 08:08:13

1

MessageBox.Show不能正常工作,因爲你的代碼是網絡環境下的,而MessageBox在WinForm的使用。通常我們使用javascript彈出消息框,例如alert('hi')

+0

你是怎麼知道提問者的代碼是在web環境下的? – 2010-10-07 07:24:50

+0

我懷疑受過教育的猜測。 – 2010-10-07 07:26:56

+0

@MAKKAM:它必須是,因爲他調試了代碼,進入了循環,但是'MessageBox'現在沒有任何異常。可能他正在調試一個Web應用程序。 – 2010-10-07 07:29:11

0

測試了你的代碼,它工作正常,所以問題可能出現在代碼的另一個地方,或者它可能是一個權限問題,雖然它發生時會返回一個異常,但MSGBOX也顯示OK。

 List<string> allFolders = new List<string>(); 
     allFolders.Add(@"C:\joomla\"); 

     foreach (string folder in allFolders) 
     { 
      string[] subFolders = Directory.GetDirectories(folder, "*", SearchOption.AllDirectories); 
      MessageBox.Show("Test"); 
     }