Как проверить наличие ошибок ввода-вывода при использовании «ifstream», «stringstream» и «rdbuf ()» для чтения содержимого файла в строку? - PullRequest
6 голосов
/ 30 октября 2011

Я использую следующий метод для чтения содержимого файла в строку:

std::ifstream t("file.txt");
std::stringstream buffer;
buffer << t.rdbuf();
std::string data(buffer.str());

Но как проверить наличие ошибок ввода-вывода и убедиться, что весь контент действительно прочитан?

Ответы [ 3 ]

6 голосов
/ 30 октября 2011

Вы можете сделать это так же, как и с любой другой операцией вставки:

if (buffer << t.rdbuf())
{
    // succeeded
}

Если при извлечении из t.rdbuf() или вставке в buffer произойдет сбой, failbit будетбыть установлен на buffer.

1 голос
/ 30 октября 2011

Вы можете использовать t.good ().Вы можете посмотреть описание на http://www.cplusplus.com/reference/iostream/ios/good/

0 голосов
/ 30 октября 2011

t.good() был упомянут Башором

Обратите внимание, что t.good() != t.bad(); Вы можете использовать !t.bad() (или !t.fail(), !t.eof() для определенных условий)

Я обычно использую

if (!t.bad())
{
     // go ahead if no _unpexpected errors

} 

if (!t.fail())
   t.clear(); // clear any _expected_ errors
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...