[英]Using std::ifstream, std::istream_iterator and std::copy is not reading entire file
我有以下代码,我一直在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();
但是它只读取188个字节的186个字节。
我已经用hexeditor和ls -al
确认了文件大小。
我不知道为什么,但默认情况下似乎跳过空白。 您需要使用noskipws
禁用它:
is >> std::noskipws;
最后两个字节是什么? 另外,你真的不需要istream_iterator
来读取这样的二进制数据。 这太过分了,可能比使用streambuf
要慢。
从wilhelmtell的伟大答案中看到这个例子:
#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>());
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.