无法捕获 FileNotFoundException
Cannot catch FileNotFoundException
我想我遇到的问题与 this Thread 中已经提出的问题类似。当我在当前项目中 运行 以下代码时,我收到了一个 System.IO.FileNotFoundException
,尽管我实际上抓住了它。
XmlDocument xmlDocument = new XmlDocument();
public LoadFile(string xmlFile)
{
try {xmlDocument.Load(xmlFile);}
catch {xmlDocument.LoadXml("<settings></settings>");} // File does not exist
}
但是,当我用这段代码创建一个新项目时,异常被正确捕获。
我看不出当前项目和新项目(相同的 .NET 版本,均为 32 位)之间有任何区别。
在另一个线程中,Jon Skeet 对这个问题给出了以下答案:
My guess is that it's breaking into the FileNotFoundException in the debugger when it's initially thrown, but that it would be correctly caught by the catch block. You can change the debugger settings for exceptions - or just run it outside the debugger, of course.
我不明白。我不想禁用 FileNotFoundException
。谁能进一步解释一下,好吗?
编辑:我知道我可以改用 File.Exists(...)
;但是,我仍然想知道为什么这不起作用。
他是说调试器正在捕获(拦截)错误并在屏幕上向您展示一些东西,而不是让实际的捕获机制抛出错误。
这就是为什么他们说如果您想查看代码在实际使用中的表现,请将其停用。停用它,运行 代码,看到异常被捕获并重新激活它。
您可能想在加载其他项目时检查设置。它可能有一个存储的配置说明要停用拦截 FileNotFoundException 的调试器。
如果您运行您的代码在调试器的控制下,调试器将总是在您的 catch 块之前拦截异常。问题是调试器是否显示消息,这取决于调试器设置。如果调试器通过显示消息来处理异常,则由您决定是否要继续执行(这会将控制权传递给您的 catch 块)或不执行(终止您的应用程序)。这取决于您如何回应对话。如果您在调试器中关闭 "thrown" 异常,您仍然会看到调试器正在拦截它们的证据(它们将记录在输出 window 中),但不会中断控制流到你的捕获块。
我想我遇到的问题与 this Thread 中已经提出的问题类似。当我在当前项目中 运行 以下代码时,我收到了一个 System.IO.FileNotFoundException
,尽管我实际上抓住了它。
XmlDocument xmlDocument = new XmlDocument();
public LoadFile(string xmlFile)
{
try {xmlDocument.Load(xmlFile);}
catch {xmlDocument.LoadXml("<settings></settings>");} // File does not exist
}
但是,当我用这段代码创建一个新项目时,异常被正确捕获。
我看不出当前项目和新项目(相同的 .NET 版本,均为 32 位)之间有任何区别。
在另一个线程中,Jon Skeet 对这个问题给出了以下答案:
My guess is that it's breaking into the FileNotFoundException in the debugger when it's initially thrown, but that it would be correctly caught by the catch block. You can change the debugger settings for exceptions - or just run it outside the debugger, of course.
我不明白。我不想禁用 FileNotFoundException
。谁能进一步解释一下,好吗?
编辑:我知道我可以改用 File.Exists(...)
;但是,我仍然想知道为什么这不起作用。
他是说调试器正在捕获(拦截)错误并在屏幕上向您展示一些东西,而不是让实际的捕获机制抛出错误。
这就是为什么他们说如果您想查看代码在实际使用中的表现,请将其停用。停用它,运行 代码,看到异常被捕获并重新激活它。
您可能想在加载其他项目时检查设置。它可能有一个存储的配置说明要停用拦截 FileNotFoundException 的调试器。
如果您运行您的代码在调试器的控制下,调试器将总是在您的 catch 块之前拦截异常。问题是调试器是否显示消息,这取决于调试器设置。如果调试器通过显示消息来处理异常,则由您决定是否要继续执行(这会将控制权传递给您的 catch 块)或不执行(终止您的应用程序)。这取决于您如何回应对话。如果您在调试器中关闭 "thrown" 异常,您仍然会看到调试器正在拦截它们的证据(它们将记录在输出 window 中),但不会中断控制流到你的捕获块。