Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/128.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/105.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++ 获取std::fstream故障错误消息和/或异常_C++ - Fatal编程技术网

C++ 获取std::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

我正在使用fstream。有没有办法获取失败消息/异常


例如,如果我无法打开文件?

默认情况下,流不会在出错时引发异常,它们会设置标志。您可以使用流的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。