У кого-нибудь есть РАБОЧИЙ пример, который отображает структуру дерева каталогов в TreeView для VB .NET? - PullRequest
0 голосов
/ 26 февраля 2010

Я посмотрел везде и не могу найти версию, которая работает. Те, что я обнаружил, либо устарели, либо содержат ошибки.

У меня есть кое-что, что работает по большей части, но у меня проблемы с папками с ограниченным доступом.

Код, который я использую, выглядит следующим образом:

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-накопитель.

Однако с исходным кодом я получаю ошибки отладки в некоторых папках, потому что они ограничены в доступе. Есть ли способ игнорировать эти конкретные папки и показать остальные?

1 Ответ

3 голосов
/ 26 февраля 2010

Да, вам нужно ужесточить рамки блока 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...