mat*_*i82 8 .net c# msdn exception-handling exception
最近我遇到了一个我没想到的异常,因为在MSDN中没有记录它可以被特定的构造函数抛出.所以这是引发异常的C#行:
using (StreamReader sr = new StreamReader(filePath))
Run Code Online (Sandbox Code Playgroud)
filePath here是应该包含某个文件的完整路径的字符串.问题是我的"filePath"变量实际上是文件夹的路径,而不是文件的路径.因此构造函数StreamReader(filePath)抛出:
System.UnauthorizedAccessException: Access to the path 'D:\testFolder' is denied.
Run Code Online (Sandbox Code Playgroud)
好的,所以这显然是一个错误,我通过传递正确的路径修复它...但是查看流式读取器的MSDN文档(字符串)我没有看到任何提及此异常.在例外部分,有:
考虑更多关于这个问题,我想抛出的异常实际上应该是IOException而不是UnauthorizedAccessException.这是.NET Framework中的错误吗?问题是我有IOException处理程序,它通知用户无效的文件路径并继续应用程序工作流而不会崩溃.这个UnauthorizedAccessException崩溃了我的应用程序,因为它未处理.
我该如何处理这类问题?我想我过去遇到了类似的无证异常问题,但这个问题确实促使我研究这个问题并在这里提问.
不幸的是,实际上没有办法以一般方式处理这个问题.C#和CLR的本质使得确定可以从方法抛出的全部异常(如果不是完全不可能的话)变得困难.有一些简单的API可以,但一般来说不是.
我处理这个问题的方法就是抓住它Exception.最近版本的CLR使得默认情况下无法捕获危险的异常.因此,你只会抓住更安全的例外.除非你想对一个非常具体的错误做出反应,否则只需捕获所有错误并采取适当的操作来使API调用失败