C++ 获取std::fstream故障错误消息和/或异常
我正在使用fstream。有没有办法获取失败消息/异常C++ 获取std::fstream故障错误消息和/或异常,c++,C++,我正在使用fstream。有没有办法获取失败消息/异常 例如,如果我无法打开文件?默认情况下,流不会在出错时引发异常,它们会设置标志。您可以使用流的exception()成员函数使它们抛出异常: ifstream ifs; ifs.exceptions( std::ios::failbit ); // throw if failbit get set 理论上,你可以这样做: try { int x; ifs >> x; } catch( const std::excep
例如,如果我无法打开文件?默认情况下,流不会在出错时引发异常,它们会设置标志。您可以使用流的exception()成员函数使它们抛出异常:
ifstream ifs;
ifs.exceptions( std::ios::failbit ); // throw if failbit get set
理论上,你可以这样做:
try {
int x;
ifs >> x;
}
catch( const std::exception & ex ) {
std::cerr << "Could not convert to int - reason is "
<< ex.what();
}
试试看{
int x;
ifs>>x;
}
捕获(const std::exception&ex){
std::cerr简短回答:否。甚至在检测到故障后检查errno
(例如使用bad()
,fail()
)在各种操作无法可靠工作之后。创建流的ifstream
/包装无法打开的文件不一定会设置失败位,直到您尝试读取、写入或关闭它。
长回答:您可以调用<代码> IOS::异常(IOSKBASE::IOSTATE)< /CUT>请求<代码> IOSKBASE::IOSUBY < /COD>当设置相应的位(BADIT、FROBIT、EFOBIT)时,将抛出异常,但这至少在GNU和微软C++库上是这样的除了手动检查位之外,没有得到更多的信息,结果基本上是毫无意义的,IMHO。通过检查,我发现也errno
和GetLastError()
设置了最后一个错误,并且检查它们非常有用。对于获取字符串消息,使用:
strerror(errno);
如果您提供一些关于如何使用此函数的代码片段,那就太好了。GetLasterRor()仅适用于Windows。