Обработка исключений и открытие файла? - PullRequest
37 голосов
/ 12 марта 2012

Можно ли использовать исключения с открытием файла в качестве альтернативы использованию .is_open()?

Например:

ifstream input;

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

Если это так, то какой тип someException?

Ответы [ 2 ]

35 голосов
/ 23 апреля 2012

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

Также прочитайте этот ответ 11085151 , который ссылается на эту статью

// 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;
}

Пример кода, работающего на Wandbox

РЕДАКТИРОВАТЬ: ловить исключения по константной ссылке 2145147

РЕДАКТИРОВАТЬ: удален бит сбоя из набора исключений.Добавлены URL для улучшения ответов.

0 голосов
/ 12 марта 2012

С статья cppreference.com на std::ios::exceptions

При сбое устанавливается флаг сбоя (который может быть проверен при сбое элемента), и в зависимости от значения, установленного с исключениями, может быть выдано исключение.

...