2011-06-06 143 views
3

因此它被认为只捕捉你无法预测或例外的异常。捕捉filenotfound异常

因此,例如,IOExceptions而不是FileNotFoundException(因为这种情况下可以用简单的文件处理,避免使用异常作为流量控制)。

这是我对这个话题的理解,纠正我,如果我错了。

但是,这引发了问题....为什么像FileNotFoundException这样的异常可用?

感谢

+3

不好的例子,检查一个文件是否存在不是并发安全的。 – 2011-06-06 23:07:21

回答

2

您应该捕获您可以处理的异常。你的第一句话有点偏离,可能是导致你困惑的原因。

“所以它被认为只捕捉你无法预测或例外的例外。”

这应该阅读

“所以它是唯一抛出例外,你不能预测或有特殊情况说。”

因此,如果你可以处理FileNotFoundException,那么你应该抓住它。有许多异常会扩展IOException,当然,你不能(不想?)处理所有这些异常。

+0

什么情况会阻止我处理FileNotFoundException?我想我可以通过使用文件存在检查和try-catch块来处理FileNotFoundException,对吗? – dotnetdev 2011-06-07 21:05:55

+0

@dotnetdev - 这句话只是说明你只能捕获你的程序能够处理的异常,以便它可以优雅地失败。所以,如果你有一个易失文件(也许它是一个缓存),你可能会捕获FileNotFoundExceptions,因为你只是从数据库加载并重新创建文件。检查文件是否存在的问题是它是共享资源。它可以被删除。在我的例子中,如果你需要文件在那里,或者你没有什么可以做的,你可以捕获它,以避免发送给用户的恶意邮件。 – 2011-06-07 22:28:55

+0

我让你了解共享资源的东西。执行if/else检查时出现的问题是该文件可能在此之后和使用之前被删除。鉴于你的例子,我假设重载/重新创建操作发生在catch块中?如果没有什么可以做,以某种方式收回,那么就不要抓住它看起来。我没有想到的是,某些文件可能无法再次加载(例如暂时的),并且所有文件及其环境!=相同。 – dotnetdev 2011-06-07 22:39:02

2

考虑该文件大干快上,当你检查它并执行,可能会导致异常的操作之间的文件系统删除的情况。这似乎不大可能,但这种事情会发生。

0

您必须区分最佳实践和绝对要求。在尝试访问文件之前先检查文件是一种最佳做法。但是,这不能真正执行。由于文件在被访问前存在绝对要求,框架会抛出异常来强制执行此条件。

在一个理想世界中,不会有什么异常,因为就没有错误和所有的程序和网络(和用户!)是绝对完美的。