繁体   English   中英

使用std :: ifstream,std :: istream_iterator和std :: copy不会读取整个文件

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM