Вопрос по c++ – Попробуйте поймать обработку исключений C ++

1

Я только начал с обработки исключений в C ++, используяtry а такжеcatch блоки. У меня есть текстовый файл с некоторыми данными, и я читаю этот файл, используяifstream а такжеgetline как показано ниже,

ifstream file;
file.open("C:\\Test.txt", ios::in);
string line;
string firstLine;
if (getline(file, line, ' '))
{
    firstLine = line;
    getline(file, line);
}

Я хотел бы знать, как реализовать обработку исключений в случаеfile.open не удается открыть указанный файл, так как он не существует по указанному пути, например, нетTest.txt вC:

Ваш Ответ

3   ответа
3

состояния.ссылка имеет очень четкий пример, который именно то, что вы просили.

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded capricorn_heitus
Error: User Rate Limit Exceeded
Error: User Rate Limit ExceedednotError: User Rate Limit Exceeded
0

все зависит от того, что вы хотите сделать, если файл не существует.

Код, как он есть на данный момент (при условии, что этоmain) просто выйдет из процесса.

Однако, если это вызов функции, вы, вероятно, захотите добавить обработку исключений вокруг вызова этой функции.

Например.

try
{
    OpenAndReadFile( std::string filename );
}
catch ( std::ifstream::failure e )
{
    // do soemthing else
}
catch ( OtherException e )
{
}
catch ( ... )
{
    // All others
}

Это предполагает, что исключение включено дляifstream.

13

навливают некоторые флаги ошибок. Вы всегда можете проверить, успешно ли прошла предыдущая операция с контекстным преобразованием в bool:

ifstream file;
file.open("C:\\Test.txt", ios::in);
if (!file) {
    // do stuff when the file fails
} else {
    string line;
    string firstLine;
    if (getline(file, line, ' '))
    {
        firstLine = line;
        getline(file, line);
    }
}

Вы можете включить исключения с помощьюexceptions функция-член. Я считаю, что чаще всего это не очень помогает, потому что вы больше не можете делать такие вещи, какwhile(getline(file, line)): такой цикл будет выходить только с исключением.

ifstream file;
file.exceptions(std::ios::failbit);
// now any operation that sets the failbit error flag on file throws

try {
    file.open("C:\\Test.txt", ios::in);
} catch (std::ios_base::failure &fail) {
    // opening the file failed! do your stuffs here
}

// disable exceptions again as we use the boolean conversion interface 
file.exceptions(std::ios::goodbit);

string line;
string firstLine;
if (getline(file, line, ' '))
{
    firstLine = line;
    getline(file, line);
}

В большинстве случаев я не думаю, что включение исключений для iostreams стоит хлопот. API работает лучше с ними.

Error: User Rate Limit Exceeded
Error: User Rate Limit ExceededifError: User Rate Limit ExceededelseError: User Rate Limit Exceeded capricorn_heitus
contextual conversion to boolError: User Rate Limit Exceededexplicit bool()Error: User Rate Limit Exceededvoid*Error: User Rate Limit ExceededboolError: User Rate Limit Exceeded
Error: User Rate Limit Exceeded capricorn_heitus
Error: User Rate Limit Exceeded

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