代码之家  ›  专栏  ›  技术社区  ›  RiddlerDev

异常情况下如何移动文件?

  •  0
  • RiddlerDev  · 技术社区  · 15 年前

    要求: 出现错误(引发异常)时,应将正在处理的文件移到包含错误的文件的文件夹中(app.config设置)。

    问题是: 我能处理这个问题的唯一方法是在主try/catch中嵌套一个try/catch来尝试移动文件,这样如果移动失败,就会引发另一个异常。我知道我可以尽我最大的努力来确保目录的存在,权利被赋予,但因为它是一个网络驱动器…我只知道在某个时刻一定会发生错误。

    例子

    Try
       (Do Some Logic, but an error happens)
    Catch ex As Exception
       Try
           (Attempt to move file)
       Catch exinner as Exception
           Throw New Exception("Cannot move file to Error Directory", innerex)
       End Try
       (Raise Error Event for logging by form/batch app)
    End Try
    

    事实上,这比我想象的还要可怕。

    现在我知道我做错了什么。我应该如何真正地尝试处理catch中可能发生的错误,以便仍然可以移动文件并尝试调用我的事件?

    2 回复  |  直到 15 年前
        1
  •  3
  •   stimms    15 年前

    这一切对我来说都很好。在接球区内尝试接球是完全合理的。你可以检查你提到的所有事情,但总有可能网络会瘫痪,或者你只是简单的不能写那个文件。之后你要做什么取决于你自己。错误消息和暂停处理似乎是合理的。

        2
  •  1
  •   Thorsten Dittmar    15 年前

    这正是您在仅使用异常时的做法。您可能会考虑使用标志,但这也不是更好的选择:

    (Set file processing error flag to false)
    Try
       (Do Some Logic, but an error happens)
    Catch ex As Exception
       (Set file processing error flag to true)
    End Try
    
    IF (file processing error flag = true)
       Try
           (Attempt to move file)
       Catch exinner as Exception
           Throw New Exception("Cannot move file to Error Directory", innerex)
       End Try
       (Raise Error Event for logging by form/batch app)
    End Try
    

    没那么好…