Search code examples
c++exceptioninputstreamfile-handling

Exception Handling and Opening a File?


Is it possible to use exceptions with file opening as an alternative to using .is_open()?

For example:

ifstream input;

try{
  input.open("somefile.txt");
}catch(someException){
  //Catch exception here
}

If so, what type is someException?


Solution

  • http://en.cppreference.com/w/cpp/io/basic_ios/exceptions

    Also read this answer 11085151 which references this article

    // ios::exceptions
    #include <iostream>
    #include <fstream>
    using namespace std;
    
    void do_something_with(char ch) {} // Process the character 
    
    int main () {
      ifstream file;
      file.exceptions ( ifstream::badbit ); // No need to check failbit
      try {
        file.open ("test.txt");
        char ch;
        while (file.get(ch)) do_something_with(ch);
        // for line-oriented input use file.getline(s)
      }
      catch (const ifstream::failure& e) {
        cout << "Exception opening/reading file";
      }
    
      file.close();
    
      return 0;
    }
    

    Sample code running on Wandbox

    EDIT: catch exceptions by const reference 2145147

    EDIT: removed failbit from the exception set. Added URLs to better answers.