例如,假设以下 VB.NET 代码片段删除一个目录。
Try
Dim SomeFolder="c:\somefolder"
System.IO.Directory.Delete(SomeFolder, True)
Catch ioex As System.IO.IOException
'What went wrong?
'File locked by another process?
'File not found?
'something else?
End Try
在异常处理程序中,如果目录或其中的文件是打开的,我想让用户有机会关闭文件并重试操作,但前提是 IOException 是由锁定问题引起的。
问题是 IOException 可能由于多种原因引发,例如文件上设置的路径无效或只读标志。这些条件中的每一个都在 . 异常对象的message属性,但是在错误消息中硬编码检查特定字符串以检测失败的具体原因感觉太错误了。我不太相信错误字符串将与 .net 的未来版本一致,并且讨厌不得不大惊小怪地编写本地化代码来处理消息以非英语形式返回的可能性.
必须有一种更好的方法来处理非常常见的异常处理问题。我错过了什么吗?
更新/澄清:感谢到目前为止的答案,但我可能让我的例子有点太笼统了。至少现在,我正在专门寻找一种方法来检测文件被异常处理程序中的另一个进程锁定的情况。