2016-11-10 12 views
-3

Рассмотрим следующий пример. Я открываю файл и читаю первые 100 байт.C++: Какова наилучшая практика обработки ошибок (без исключений) при чтении файла

std::ifstream fileRead; 
fileRead.open("file.txt", std::ios::binary); 
std::vector<char> buffer(100); 
fileRead.read(buffer.data(), 100); 

Можете ли вы предложить наилучшую практику для обработки всех возможных ошибок при чтении файла без использования исключений?

+1

Да: прочитайте свою книгу на C++, в которой объясняется, как правильно проверять ошибки при чтении из файла. –

ответ

1

Вам необходимо знать, какие ошибки вы беспокоитесь и, в частности, какие ошибки вы хотите обработать + продолжить, против ошибок, которые вы хотите прекратить при встрече.

Например, одна ошибка, с которой вы можете столкнуться: Что делать, если файл не существует (или у вас нет прав доступа/доступа к нему)? Эта проверка довольно проста:

std::ifstream fileRead("file.txt", std::ios::binary); 
if(!fileRead) {/*File doesn't exist! What do we do?*/}; 

Что делать, если файл не содержит 100 байт?

std::ifstream fileRead("file.txt", std::ios::binary); 
if(!fileRead) {/*File doesn't exist! What do we do?*/} 
else { 
    std::vector<char> buffer(100); 
    fileRead.read(buffer.data(), 100); 
    if(!fileRead) { 
     std::cout << "Only " << fileRead.gcount() << " bytes could be read.\n"; 
    } 
} 

Только для кода, который вы предоставили, это единственные ошибки, с которыми я буду писать обработку ошибок. Если есть другой код, связанный с этим примером, ваша обработка ошибок может потребоваться более обширной.

Обратите внимание, что ни один из этих примеров не использует обработку исключений: библиотека iostreams C++ выполняет [большую часть] обработку ошибок без исключения исключений.