如何从具有 vb.net 的驱动器获取可访问的文件夹名称 (Visual Studio 2012 Express)

how to get the accessible folder names from a drive with vb.net (Visual Studio 2012 Express)

提问人:Smokey 提问时间:7/12/2022 最后编辑:Tu deschizi eu inchidSmokey 更新时间:7/12/2022 访问量:161

问:

我正在尝试为一个朋友创建一个程序,让他可以“整理”并找到他的文件。
他有几个驱动器和许多文件夹。我想为他做的是:

  1. 具有在组合框中列出所有活动驱动器的代码。然后,他可以选择要搜索任何或仅按扩展名搜索的文件类型的驱动器。

  2. 然后他要么选择“一切”,要么选择特定类型(即:音乐)

  3. 单击按钮后,列表框将填充文件的完整路径

开始这个写作过程,我已经完成了这个任务:

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    Button1.Enabled = False

    Dim allDrives() As DriveInfo = DriveInfo.GetDrives()

    Dim d As DriveInfo
    For Each d In allDrives
        If d.IsReady Then ComboBox1.Items.Add(d)
    Next

End Sub

Private Sub ComboBox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBox1.SelectedIndexChanged

    If ComboBox1.SelectedIndex <> -1 Then

        Try

            For Each DName As String In My.Computer.FileSystem.GetDirectories(ComboBox1.Text, FileIO.SearchOption.SearchTopLevelOnly)
                Dim LDN As Integer = Len(DName)
                Dim FName As String = Strings.Mid(DName, 4, LDN - 3)
                CheckedListBox1.Items.Add(FName, False)
            Next

        Catch ex As Exception

        End Try

    Else
        Exit Sub
    End If

End Sub

我的第一个问题是 GetDirectories 进程正在获取我知道我无权访问的目录。我正试图弄清楚如何防止这种情况发生。谁能帮我。

vb.net visual-studio-2012

评论

0赞 dr.null 7/12/2022
您需要在循环中捕获以跳过它们。例如,请参阅 stackoverflow.com/a/58620178/14171304UnauthorizedAccessException
0赞 Smokey 7/13/2022
好的,对不起。在我尝试捕获 UnauthorizedAccessException 之前,我没有完全阅读他的所有评论,这显然不起作用。我明白为什么这不起作用,但不知道如何编码它。我能得到一些帮助吗?
0赞 Andrew Morton 7/13/2022
@Smokey 究竟抛出了哪个异常?
0赞 Smokey 7/13/2022
安德鲁,我没有任何例外,这是我的问题。我不是棚子里最锋利的工具,但我有点理解一些解释。我想我读到GetDirectories在我使用的循环类型中不起作用。没关系。因此,我需要创建一个函数,该函数将在每次调用时返回一个授权目录,然后将值放入我正在使用的 CheckedListBox 中。如果我错了,请解释原因。如果我是对的,你是怎么做到的?
0赞 Smokey 7/19/2022
谁能帮我?在上面的示例中,我的代码完美地获取了所有目录,并将它们放入选中的列表框中。如果用户(我)选择了一个“禁止访问”的目录,并且我尝试在该目录中查询任何文件,则会出现异常错误:mscorlib 中发生了类型为“System.UnauthorizedAccessException”的未经处理的异常.dll 其他信息:对路径“C:\$Recycle.Bin\S-1-5-18”的访问被拒绝。

答: 暂无答案