Как пропустить каталог или файл, когда возникает UnauthorizedAccessException - PullRequest
0 голосов
/ 07 ноября 2018

Код ниже. Я пытаюсь получить файлы по определенному пути как sDirPath, а затем сохранить их в виде дерева, в основном создавая диалоговое окно браузера пользовательских папок. Но проблема в том, что когда я получаю системные файлы или папки, которые недоступны, я получаю UnauthorizedAccessException. Это происходит в папках или файлах, таких как скрытые и системные папки или файлы, например, $ recyle.bin в C: \ или ярлыке Documents and Settings. Я просто хочу пропустить эти папки или файлы. Я не хочу их забирать.

Dim sAllfiles() As String = Directory.GetFiles(sDirPath, "*.*")
For Each sfile As String In sAllfiles          
    Dim objFileInformation As FileInfo = New FileInfo(sfile)
    Dim tnTreeNodeSub As TreeNode
    tnTreeNodeSub=tnTreeNodeRootDirectory.Nodes.Add(objFileInformation.Name)
Next    

Ответы [ 2 ]

0 голосов
/ 07 ноября 2018

Модификация ответа Габриэля Люси:

Try
    Dim sAllfiles() As String = Directory.GetFiles(sDirPath, "*.*")
    For Each sfile As String In sAllfiles
        Try
            Dim objFileInformation As FileInfo = New FileInfo(sfile)
            Dim tnTreeNodeSub As TreeNode
            tnTreeNodeSub=tnTreeNodeRootDirectory.Nodes.Add(objFileInformation.Name)
        Catch ex As UnauthorizedAccessException
            Continue For 'Ignore the exception and move on
        End Try
    Next
Catch ex As UnauthorizedAccessException
    'Ignore the exception and move on
End Try

Как это сделать, и добавление еще одного улова поможет, если вы дадите недоступный путь в sDirPath напрямую, если вы не добавите его, закроет ваше приложение.

0 голосов
/ 07 ноября 2018

Try .. Catch заявления предназначены именно для этого.

Например, это будет игнорировать только UnauthorizedAccessException. Любое другое исключение по-прежнему прерывает цикл.

Dim sAllfiles() As String = Directory.GetFiles(sDirPath, "*.*")
For Each sfile As String In sAllfiles
    Try
        Dim objFileInformation As FileInfo = New FileInfo(sfile)
        Dim tnTreeNodeSub As TreeNode
        tnTreeNodeSub=tnTreeNodeRootDirectory.Nodes.Add(objFileInformation.Name)
    Catch ex As UnauthorizedAccessException
        Continue For 'Ignore the exception and move on
    End Try
Next
...