Когда именно проверять std :: ifstream :: good ()? - PullRequest
3 голосов
/ 31 января 2020

Допустим, у меня есть код для вычисления размера файла:

std::ifstream ifs(path, std::ifstream::ate | std::ifstream::binary);
unsigned int size = ifs.tellg();
ifs.close();

Большую часть времени в C ++, где / когда уместно вызывать ifs.good()?

В моем случае, лучше ли после создания потока или после вызова tellg()?

Тогда, если good() вернет false, я должен явно закрыть поток?

1 Ответ

1 голос
/ 31 января 2020

Начиная с того момента, что вам никогда не нужно закрывать explicity поток , good() - это функция для:

Проверка, хорошее ли состояние потока

Возвращает true, если ни один из флагов состояния ошибки потока (eofbit, failbit и badbit) не установлен.

Вы можете вызвать его, чтобы убедиться, что что-то идет не так, а затем проверить другие биты, чтобы проверить, что не так. Например:

  • Достигнут конец файла при операции ввода (eofbit)

  • Логическая ошибка при операции ввода-вывода (failbit)

  • Ошибка чтения / записи при операции ввода-вывода (плохой бит)

Однако бесполезно вызывать мысль о ручном закрытии потока .

В моем случае лучше после создания потока или после вызова tellg ()?

По моему мнению, в этом случае вам не нужно звонить good(), но если вы хотите вызвать его, лучше после tellg(), что может привести к некоторой ошибке при его выполнении.

...