Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 我是否需要实现FileNotFoundError异常?_C++_File_Exception - Fatal编程技术网

C++ 我是否需要实现FileNotFoundError异常?

C++ 我是否需要实现FileNotFoundError异常?,c++,file,exception,C++,File,Exception,我有一个名为TFile的类,我不能(不想)修改它。如果没有找到输入/输出文件,它不会引发异常,但我可以使用方法IsZombie检查iternal状态。现在,我实现了一个非常简单的异常: class FileNotFoundError : public std::runtime_error { public : FileNotFoundError(const std::string & file_name="") : runtime_error("cannot find file "

我有一个名为
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
而不是我的自定义异常抛出是否有用?

没有std异常为您提供一种高选择性的方法来捕获“未找到文件”错误条件。因此,是的,如果您想用异常来表示该条件,并且希望允许客户机代码执行一些有意义的操作,那么您需要为此创建自己的类

然而,尽管这是目前为止最常见的灾难,但这种例外情况并不存在也是有原因的。一个文件在你期望的时候不在那里是很正常的。您的程序无法控制文件系统。或者可能是用户输入了错误的文件名,诸如此类。出了问题也不例外。不要将异常用于非异常情况


这是一个复杂的信息。当客户端代码有一种合理的方法来检查文件是否存在时,一定要使用它,并且在没有该资源的情况下继续执行程序是不可能的。

作为旁注,您可能会抛出而不释放刚才在上面的代码段->内存泄漏中分配的内存。我不知道是否同意这一点。检查文件是否存在并不能保证在下一行尝试打开文件时它仍然存在。确定文件是否可读的唯一完美方法是尝试读取该文件。