Как пропустить каталог или файл, когда возникает UnauthorizedAccessException

Код ниже. Я пытаюсь получить файлы по определенному пути, как 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 ответа

Решение

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

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

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 напрямую, если вы не добавите его, закроет ваше приложение.

Другие вопросы по тегам