Вопрос по c++, exception – обработка исключений

8

Умышленно у меня есть этот метод, который записывает в файл, поэтому я попытался обработать исключение из возможности, которую я записываю в закрытый файл:

void printMe(ofstream& file)
{
        try
        {
            file << "\t"+m_Type+"\t"+m_Id";"+"\n";
        }
        catch (std::exception &e)
        {
            cout << "exception !! " << endl ;
        }
};

Но очевидно, что std :: exception не является подходящим исключением для ошибки закрытого файла, потому что я намеренно пытался использовать этот метод для уже закрытого файла, но мое & quot; исключение !! & Quot; комментарий не был создан.

Так какое исключение я должен был написать ??

Ваш Ответ

2   ответа
13

Потоки по умолчанию не генерируют исключения, но вы можете сказать им, чтобы они генерировали исключения с помощью вызова функции.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

ну, я просто пытался привыкнуть к обработке исключений, но хорошо знать, что "Потоки не генерируют исключения по умолчанию", большое спасибо Joy
4

Исключение типаios_base :: недостаточностьОбратите внимание, что вы должны были установить соответствующий флаг сIOS :: исключения чтобы генерировать исключения, иначе будут установлены только внутренние флаги состояния для указания ошибки, которая является поведением по умолчанию для потоков.

Похожие вопросы