如何从范围 v3 的istream_range中检索文件大小?

How to retrieve file size from range-v3's istream_range?

本文关键字:range 检索 文件大小 istream 范围 v3      更新时间:2023-10-16

我正在尝试从范围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

istream_range使用 operator>>读取元素。operator>>是一个格式化的输入操作员,它跳过空格,可能会转换线结尾等。这就是为什么您遇到错误结果的原因。

,即使是这种方法也可以给出正确的结果,这是非常效率的。它读取整个文件。