2010-02-26 73 views
0

我已到處尋找,找不到可用的版本。我發現的那些都是過時的或者有錯誤。有沒有人有一個工作的例子,在VB.NET的TreeView中顯示目錄樹結構?

我有一些工作的大部分,但我有限制訪問文件夾的一些麻煩。

我正在使用的代碼如下:

Imports System.IO 

Public Class frmMain 
    Private Sub frmMain_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 
     For Each drive In DriveInfo.GetDrives 
      Dim i As Integer = TreeView1.Nodes.Count 

      TreeView1.Nodes.Add(drive.ToString) 

      If drive.IsReady Then 
       PopulateTree(drive.ToString, TreeView1.Nodes(i)) 
      End If 
     Next 
    End Sub 

    Private Sub PopulateTree(ByVal sDir As String, ByVal node As TreeNode) 
     Dim directory As New DirectoryInfo(sDir) 

     Try 
      For Each d As DirectoryInfo In directory.GetDirectories 
       Dim t As New TreeNode(d.Name) 

       PopulateTree(d.FullName, t) 
       node.Nodes.Add(t) 
      Next 
     Catch excpt As UnauthorizedAccessException 
      Debug.WriteLine(excpt.Message) 
     End Try 
    End Sub 
End Class 

出於測試目的,我替換本節......

If drive.IsReady Then 
    PopulateTree(drive.ToString, TreeView1.Nodes(i)) 
End If 

...這... ...

If drive.toString = "L:\" 
    PopulateTree(drive.ToString, TreeView1.Nodes(i)) 
End If 

...並且它對該驅動器正常工作。 L:\是一種可移動的USB驅動器。

但是,對於原始代碼,我在某些文件夾上收到調試錯誤,因爲它們受到訪問限制。有沒有辦法忽略這些特定的文件夾並顯示其餘的內容?

+0

調試+異常,確保關閉所有複選框。 – 2010-02-26 20:33:41

回答

3

是的,你需要收緊你的try catch塊的範圍。你發現的錯誤距離發生的地方太遠了。試試這個:

Private Sub PopulateTree(ByVal sDir As String, ByVal node As TreeNode) 
    Dim directory As New DirectoryInfo(sDir) 


     For Each d As DirectoryInfo In directory.GetDirectories 
      Dim t As New TreeNode(d.Name) 

      Try 
       PopulateTree(d.FullName, t) 
       node.Nodes.Add(t) 
      Catch excpt As UnauthorizedAccessException 
       Debug.WriteLine(excpt.Message) 
      EndTry 
     Next 

End Sub 
+0

PopulateTree例程工作正常,所以圍繞它的Try Catch塊似乎沒有多大幫助。 這個問題似乎是在這一行: 對於每個d作爲DirectoryInfo的在directory.GetDirectories 這是有道理的,GetDirectories不起作用,因爲只能訪問這些文件夾。 – 2010-02-26 20:37:09

相關問題