Как отлавливать ошибки в vb .net? - PullRequest
0 голосов
/ 03 октября 2019

У меня большой опыт работы с VBA, и я только изучаю VB .net. Я написал утилиту резервного копирования, которая прекрасно работает, пока не найдет файл, который заблокирован. В этот момент выдается исключение:

System.IO.IOException: 'Процесс не может получить доступ к файлу, поскольку другой процесс заблокировал часть файла.

Обсуждаемая строка:

 FromFile.CopyTo(ToFileName, True)

С VBA я мог просто перехватить ошибку и продолжить дальше. Похоже, мне нужен раздел «Попробуй наконец поймать», но я не знаю, как определить это исключение, и сказать программе продолжить. Это настольное приложение, основанное на форме.

Ответы [ 2 ]

2 голосов
/ 03 октября 2019

Вы можете просто обернуть свою команду в блок Try .. Catch:

    Try
        FromFile.CopyTo(ToFileName, True)
    Catch ex As Exception
        ' Handle the exception (if you want to)
    End Try

В этом примере все подробности об исключении будут содержаться в объекте ex. Вам не нужно иметь никакого кода в разделе Catch - оставляя пустым, вы фактически говорите, игнорируйте все ошибки (обычно это плохо).

Вам нужен только раздел finally, если вы хотитезапускать некоторый код все время (независимо от того, работал ли код в вашем Try или нет):

    Try
        FromFile.CopyTo(ToFileName, True)
    Catch ex As Exception
        ' Handle the exception (if you want to)
    Finally
        ' This will execute whether there was an exception or not
    End Try

Вы также можете перехватывать определенные типы исключений и обрабатывать их по-разному, если хотите:

Try
    FromFile.CopyTo(ToFileName, True)
Catch ioEx as IO.IOException
    ' Code in this section will only be executed if an exception of type 'IO.IOException' is thrown
Catch nullEx As ArgumentNullException
    ' Handle a null argument exception
End Try
0 голосов
/ 03 октября 2019

Это была большая помощь. Спасибо: вот что у меня сейчас есть решение:

        Try
            FromFile.CopyTo(ToFileName, True)

        Catch ex As System.IO.IOException
            If ex.HResult = -2147024863 Or ex.HResult = -2147024864 Then
            Else
                MsgBox(ex.HResult & " - " & ex.Message)
            End If

        End Try

Далее мне нужно подумать, что делать с другими исключениями, но это может подождать некоторое время.

Следующий шаг -подсчитать количество просмотренных файлов и общее количество копий во всех подпапках

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...