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

时间:2011-11-10 06:38:00

标签: c++ stl

我在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中确认了文件大小。

2 个答案:

答案 0 :(得分:11)

我不知道为什么,但默认情况下似乎跳过了空格。您需要使用noskipws禁用该功能:

is >> std::noskipws;

答案 1 :(得分:9)

最后两个字节是什么?此外,您不需要istream_iterator来读取这样的二进制数据。这太过分了,可能比使用streambuf慢。

请参阅wilhelmtell's great answer中的此示例:

#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>());