我有一个名为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
而非我的自定义异常抛出是否有用?
答案 0 :(得分:2)
没有std异常为您提供了一种高度选择性的方法来捕获'找不到文件'错误情况。所以,是的,如果你想用异常来表示那个条件,并且你想让客户端代码做一些有意义的事情,那么你需要为此创建自己的类。
然而,即使这是迄今为止最常见的事故,也存在一个原因,即该异常尚未存在。当你期望文件不存在时,这是正常的。您的程序无法控制文件系统。或者也许用户输入错误的文件名,就像那样。这是错误的,这并不是特别的。不要对非特殊情况使用例外。
这是一条混合信息。当客户端代码以合理的方式检查文件是否存在时, 使用它和继续执行程序而不会出现该资源。