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

Vb.net 异常情况下如何移动文件?,vb.net,exception-handling,file-processing,nested-exceptions,Vb.net,Exception Handling,File Processing,Nested Exceptions,要求: 出现错误(引发异常)时,应将正在处理的文件移动到包含错误的文件的文件夹(app.config设置) 问题是: 处理这个问题的唯一方法是在主Try/Catch中嵌套Try/Catch来尝试移动文件,这样如果移动失败,就会引发另一个异常。我知道我可以尽我最大的努力确保目录存在,权限被授予,但由于它是一个网络驱动器。。。我只知道在某个时刻一定会发生错误 范例 Try (Do Some Logic, but an error happens) Catch ex As Exception

要求: 出现错误(引发异常)时,应将正在处理的文件移动到包含错误的文件的文件夹(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中可能出现的错误,以便我仍然可以移动文件并尝试调用我的事件?

这一切对我来说都很好。将try-catch块放在catch中是完全合理的。你可以检查你提到的所有东西,但总有可能网络瘫痪,或者你无法写入该文件。你在那之后做什么取决于你自己。错误消息和暂停处理似乎是合理的

这一切对我来说都很好。将try-catch块放在catch中是完全合理的。你可以检查你提到的所有东西,但总有可能网络瘫痪,或者你无法写入该文件。你在那之后做什么取决于你自己。错误消息和暂停处理似乎是合理的

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

(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

没有那么好…

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

(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

没有那么好…

我会说这不太干净。当然是这样,这就是为什么我说嵌套异常方法恰恰是正确的方法。我会说这不太干净。当然是这样,这就是为什么我说嵌套异常方法恰恰是正确的方法。这很公平。谢谢,那样做似乎是不对的,但这也解释了为什么我想不出更好的办法。这很公平。谢谢,那样做似乎不对,但这也解释了为什么我想不出更好的办法。