2016-07-07 30 views
0

我有一個簡單的按鈕,當點擊時填充包含在文本框中的所有子文件夾的列表框。是否有可能執行搜索,因此它只返回一定深度/級別的子文件夾。搜索文件夾到一定的深度,所以不要返回每個子文件夾

例如,而不是:

文件夾1> subfolder1> subfolder2> subfolder3> subfolder4

我可以告訴它只是返回第2級: 文件夾1> subfolder1> subfolder2>

我現在的代碼如下

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 
    AddFolders(txtsearchdirectory.Text) 
End Sub 
Private Sub AddFolders(root As String) 
    ListBox1.Items.Add(root) 
    Try 
     For Each folder As String In My.Computer.FileSystem.GetDirectories(root) 
      AddFolders(folder) 
      Application.DoEvents() 
     Next 
    Catch ex As Exception 
     System.Windows.Forms.MessageBox.Show(ex.Message) 
    End Try 
End Sub 
+0

在這種情況下,Application.DoEvents()的目的是什麼?一般來說,你不想像這樣抽取消息隊列。 –

+0

大量的複製粘貼貨物邪教代碼在這裏。 'DoEvents'是真正的問題,但是吞噬所有異常的catch塊也是一個壞主意。您不需要處理異常來獲取消息框。這會自動發生未處理的異常。只處理你實際上可以......處理的異常。並且不要使用'DoEvents'。這不是一個「保持我的UI響應」功能的神奇功能。此代碼不應該花費足夠長時間才能在後臺線程上運行它。在用戶的大腦處理「點擊」事件時,我可以在機器上迭代整個文件系統。 –

回答

0

我在做大量填充樹視圖時做了類似的事情。我已經測試過它,它似乎正在做你所要求的。如果你想要一個變量最大值,只需添加另一個參數並將其傳遞給鏈。

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 
    AddFolders(txtsearchdirectory.Text, 0) 
End Sub 

Private Sub AddFolders(root As String, recursionDepth As Integer) 
    If recursionDepth <= 2 Then 
     ListBox1.Items.Add(root) 
     Try 
      For Each folder As String In My.Computer.FileSystem.GetDirectories(root) 
       AddFolders(folder, recursionDepth + 1) 
       Application.DoEvents() 
      Next 
     Catch ex As Exception 
      System.Windows.Forms.MessageBox.Show(ex.Message) 
     End Try 
    End If 
End Sub 
+0

我沒有添加它,所以你最好問OP –

+0

糟糕,錯誤的評論領域。對於那個很抱歉。 –

+0

你可以使用'If recursionDepth> 0 Then ...','AddFolders(folder,recursionDepth - 1)',並用'AddFolders(txtsearchdirectory.Text,2)''調用它。那裏可能有一個錯誤的錯誤。 –

相關問題