【发布时间】:2014-01-28 16:26:58
【问题描述】:
在互联网上搜索了一种尽可能精简的方法后,我找不到适合我的方法。我从this question 获取了代码,试图让它工作,但不知道如何挽救我的生命。这是我所拥有的:
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'Get a list of drives
Dim drives As System.Collections.ObjectModel.ReadOnlyCollection(Of DriveInfo) = My.Computer.FileSystem.Drives
Dim rootDir As String = String.empty
'Now loop thru each drive and populate the treeview
For i As Integer = 0 To drives.Count - 1
rootDir = drives(i).Name
'Add this drive as a root node
TreeView1.Nodes.Add(rootDir)
'Populate this root node
PopulateTreeView(rootDir, TreeView1.Nodes(i))
Next
End Sub
Private Sub PopulateTreeView(ByVal dir As String, ByVal parentNode As TreeNode)
Dim folder As String = String.Empty
Try
Dim folders() As String = IO.Directory.GetDirectories(dir)
If folders.Length <> 0 Then
Dim childNode As TreeNode = Nothing
For Each folder In folders
childNode = New TreeNode(folder)
parentNode.Nodes.Add(childNode)
PopulateTreeView(folder, childNode)
Next
End If
Catch ex As UnauthorizedAccessException
parentNode.Nodes.Add(folder & ": Access Denied")
End Try
End Sub
但是,它只列出了驱动器及其文件夹,我需要它从一开始就列出特定目录中的目录和文件,而不必一直沿着树向下查找您要查找的内容。我尝试将rootDir 更改为我尝试访问的特定文件夹的地址,但无济于事。有人有什么建议吗?
【问题讨论】:
-
您是否尝试仅在展开的父级上显示文件夹/文件?您当前的实现将列出整个机器上每个文件夹中的每个文件。它需要永远。当用户单击展开一个目录时,为什么不从顶级目录和
PopulateTreeView开始呢?一次更快,强度更低。 -
我要做的是采用上面的代码,它适用于特定路径而不是所有驱动器。
-
上面的代码已经可以在特定路径上运行。像这样调用 PopulateTreeView:
PopulateTreeView(yourPath, TreeView1.Nodes(0))。看看下面我的回答,你会注意到它确实针对特定路径执行此操作,并在点击时触发。