[英]Using std::istream_iterator to read binary data from file stops prematuraly
我正在尝试使用以下代码从文件读取二进制数据:
std::ifstream fp;
fp.open("C:\\my_binary_data.dat", std::ios::binary);
std::istream_iterator<byte> start(fp), end;
std::vector<byte> tof(start, end);
fp.close();
该文件有401个字节,但是tof向量只有380个元素,即它在结尾之前停止读取。 将end
设置为nullptr(?),因此迭代器读取直到读取零字节? 第380个字节为109。这里的停止条件是什么? 以及如何确定它可以读取整个文件?
使用
fp.seekg (0, fp.end);
std::streamoff length = fp.tellg();
fp.seekg (1, fp.beg);
给出长度= 401
istream_iterator
是operator >>
的化身。 它使用该运算符从流中读取。 几乎从来就不需要读取二进制数据,因为>>
是格式化的输入函数。 您可能可以通过在流上使用诸如noskipws
操纵器来强迫它执行所需的操作,但是仍然可以有效地使用错误的工具来完成工作。
如果要基于迭代器访问流中的二进制数据,则最好使用istreambuf_iterator
(保证逐个字符地工作)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.