Используя std :: ifstream, std :: istream_iterator и std :: copy не читают весь файл - PullRequest
5 голосов
/ 10 ноября 2011

У меня есть следующий код, который я использовал в 188-байтовом файле:

std::ifstream is("filename", std::ios::binary);

std::vector<uint8_t> buffer;
std::istream_iterator<uint8_t> i_input(is);
std::copy(i_input, std::istream_iterator<uint8_t>(),
          std::back_inserter(buffer));

std::cout << buffer.size();

Однако он читает только 186 байтов из 188 байтов.

Я подтвердил размер файла в гекседиторе, а также ls -al.

Ответы [ 2 ]

11 голосов
/ 10 ноября 2011

Не знаю почему, но по умолчанию это пропускает пробелы.Вы должны отключить это с помощью noskipws:

is >> std::noskipws;
9 голосов
/ 10 ноября 2011

Каковы последние два байта?Кроме того, вам не нужно istream_iterator для чтения двоичных данных, как это.Это излишне и, вероятно, медленнее, чем использование streambuf.

См. Этот пример из отличного ответа Вильгельмтелла :

#include<iterator>
// ...

std::ifstream testFile("testfile", std::ios::in | std::ios::binary);
std::vector<char> fileContents((std::istreambuf_iterator<char>(testFile)),
                               std::istreambuf_iterator<char>());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...