Ваш код слишком сложен и подвержен ошибкам.
Чтение в цикле и проверка только на eof
- логическая ошибка, так как это приведет к бесконечному циклу, если при чтении возникнет ошибка(по любой причине).
Вместо этого вам нужно проверить все состояния отказа потока, что можно сделать, просто проверив сам объект istream
.
Так как это уже возвращается функцией read
, вы можете (и, действительно, должны) структурировать любой цикл чтения следующим образом:
while (myFile.read(buffer, aBlock))
process(buffer, aBlock);
process(buffer, myFile.gcount());
Это в то же время короче, нескрыть ошибки и является более читабельным , поскольку проверка состояния потока в цикле является установленной идиомой C ++.