【问题标题】:How to trap errors in vb .net?如何捕获 vb .net 中的错误?
【发布时间】:2020-02-01 15:22:01
【问题描述】:

我有大量的 VBA 经验,并且正在学习 VB .net。我编写了一个备份实用程序,它可以正常工作,直到找到一个被锁定的文件。此时会抛出异常:

System.IO.IOException: '该进程无法访问该文件,因为另一个进程已锁定该文件的一部分。

有问题的行是

 FromFile.CopyTo(ToFileName, True)

使用 VBA,我可以简单地捕获错误并继续下一步。看起来我需要一个“Try Catch finally”部分,但不知道如何识别这个异常,并告诉程序继续。它是一个基于圆形的桌面应用程序。

【问题讨论】:

    标签: vb.net exception


    【解决方案1】:

    您可以将您的命令包装在 Try .. Catch 块中:

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

    在此示例中,有关异常的所有详细信息都将包含在对象 ex 中。您不必在 Catch 部分中有任何代码 - 留空您实际上是在说忽略所有错误(通常是一件坏事)。

    如果您想一直运行一些代码(无论您的 Try 中的代码是否有效),您只需要一个 finally 部分:

        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
    

    【讨论】:

      【解决方案2】:

      这是一个很大的帮助。谢谢: 这是我现在的解决方案:

              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
      

      接下来我需要考虑如何处理其他异常,但这可能需要等待一段时间。

      下一步是计算查看的文件数,以及实际复制的所有子文件夹的总数

      【讨论】:

      • 文件操作仅供参考,您可能还会收到System.Security.SecurityExceptionUnauthorizedAccessException
      • @dmhzx 大括号有什么作用?
      • @mary:我在为帖子放置“代码”包装时遇到了麻烦。牙套实际上没有任何作用。他们根本不在程序中。对此感到抱歉
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-06-16
      • 2011-06-30
      • 1970-01-01
      • 1970-01-01
      • 2022-01-15
      • 2022-11-17
      • 1970-01-01
      相关资源
      最近更新 更多