Get std::fstream failure error messages and/or exceptions

Streams by default do not throw exceptions on error, they set flags. You can make them throw exceptions by using the stream’s exception() member function:

ifstream ifs;
ifs.exceptions( std::ios::failbit );   // throw if failbit get set

Theoretically, you could then do something like this:

try {
  int x;
  ifs >> x;
}
catch( const std::exception & ex ) {
   std::cerr << "Could not convert to int - reason is " 
                  << ex.what();
}

Unfortunately, the C++ Standard does not specify that thrown exceptions contain any error message, so you are in implementation specific territory here.

Leave a Comment