我是否需要实现FileNotFoundError异常?

时间:2010-12-06 22:20:42

标签: c++ file exception

我有一个名为TFile的课程,我不能(不想)修改它。如果找不到输入/输出文件,它不会抛出异常,但我可以使用IsZombie方法检查iternal状态。现在,我实现了一个非常简单的例外:

class FileNotFoundError : public std::runtime_error
{
public :

FileNotFoundError(const std::string & file_name="") 
: runtime_error("cannot find file " + file_name), filename(file_name) {}; 
string filename;
~FileNotFoundError() throw() {};
};

我用它作为:

f = new TFile(total.c_str(), "RECREATE") ;
if (f->IsZombie())
{
    throw FileNotFoundError(total);
}

是否有更好的方法来实现此异常,我的意思是:将标准异常作为ifstream::failure而非我的自定义异常抛出是否有用?

1 个答案:

答案 0 :(得分:2)

没有std异常为您提供了一种高度选择性的方法来捕获'找不到文件'错误情况。所以,是的,如果你想用异常来表示那个条件,并且你想让客户端代码做一些有意义的事情,那么你需要为此创建自己的类。

然而,即使这是迄今为止最常见的事故,也存在一个原因,即该异常尚未存在。当你期望文件不存在时,这是正常的。您的程序无法控制文件系统。或者也许用户输入错误的文件名,就像那样。这是错误的,这并不是特别的。不要对非特殊情况使用例外。

这是一条混合信息。当客户端代码以合理的方式检查文件是否存在时, 使用它继续执行程序而不会出现该资源。