Вопрос по c++, exception – обработка исключений
Умышленно у меня есть этот метод, который записывает в файл, поэтому я попытался обработать исключение из возможности, которую я записываю в закрытый файл:
void printMe(ofstream& file)
{
try
{
file << "\t"+m_Type+"\t"+m_Id";"+"\n";
}
catch (std::exception &e)
{
cout << "exception !! " << endl ;
}
};
Но очевидно, что std :: exception не является подходящим исключением для ошибки закрытого файла, потому что я намеренно пытался использовать этот метод для уже закрытого файла, но мое & quot; исключение !! & Quot; комментарий не был создан.
Так какое исключение я должен был написать ??
Потоки по умолчанию не генерируют исключения, но вы можете сказать им, чтобы они генерировали исключения с помощью вызова функции.file.exceptions(~goodbit)
.
Вместо этого обычный способ обнаружения ошибок состоит в простой проверке состояния потока:
if (!file)
cout << "error!! " << endl ;
Причина этого заключается в том, что во многих распространенных ситуациях недопустимое чтение является второстепенной, а не основной проблемой:
while(std::cin >> input) {
std::cout << input << '\n';
} //read until there's no more input, or an invalid input is found
// when the read fails, that's usually not an error, we simply continue
по сравнению с:
for(;;) {
try {
std::cin >> input;
std::cout << input << '\n';
} catch(...) {
break;
}
}
Смотрите это в прямом эфире:http://ideone.com/uWgfwj
Исключение типаios_base :: недостаточностьОбратите внимание, что вы должны были установить соответствующий флаг сIOS :: исключения чтобы генерировать исключения, иначе будут установлены только внутренние флаги состояния для указания ошибки, которая является поведением по умолчанию для потоков.