Я посмотрел везде и не могу найти версию, которая работает. Те, что я обнаружил, либо устарели, либо содержат ошибки.
У меня есть кое-что, что работает по большей части, но у меня проблемы с папками с ограниченным доступом.
Код, который я использую, выглядит следующим образом:
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-накопитель.
Однако с исходным кодом я получаю ошибки отладки в некоторых папках, потому что они ограничены в доступе. Есть ли способ игнорировать эти конкретные папки и показать остальные?