Обработка исключений и открытие файла?
Можно ли использовать исключения при открытии файла в качестве альтернативы использованию .is_open()
?
Например:
ifstream input;
try{
input.open("somefile.txt");
}catch(someException){
//Catch exception here
}
Если да, то какой тип someException
?
3 ответа:
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
EDIT: удален failbit из набора исключений. Добавлены URL-адреса для лучших ответов.
Из cppreference.com статья о
std::ios::exceptions
При сбое устанавливается флаг failbit (который можно проверить с помощью элемента fail), и в зависимости от значения, заданного с исключениями, может быть выдано исключение.