如何从range-v3的istream_range中检索文件大小?

时间:2018-04-29 14:14:10

标签: c++ istream-iterator range-v3

我正在尝试从范围-v3获取文件大小值,就像这样。

std::ifstream i("test.bin", std::ios::binary | std::ios::in);
auto rng = ranges::istream_range<unsigned char>(i);
std::cout << ranges::distance(rng);

然而,距离函数似乎返回了错误的大小。为什么呢?

godbolt.org/g/DsouJE

1 个答案:

答案 0 :(得分:1)

istream_range使用operator>>来阅读元素。 operator>>是一个格式化的输入运算符,它会跳过空格,可能会转换行结尾等。这就是为什么你得到错误的结果。

即使这种方法会给出正确的结果,效率也很低。它读取整个文件。