【问题标题】:How to retrieve file size from range-v3's istream_range?如何从 range-v3 的 istream_range 检索文件大小?
【发布时间】:2018-04-29 14:14:09
【问题描述】:

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

【问题讨论】:

  • 如果你仔细想想,它不能给你尺寸是有道理的。它需要读取整个文件才能给你它的大小,如果文件很大那真的没有任何意义。

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


【解决方案1】:

istream_range 使用operator&gt;&gt; 读取元素。 operator&gt;&gt; 是一个格式化的输入运算符,它会跳过空格,可能会转换行尾等。这就是你得到错误结果的原因。

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

【讨论】:

    猜你喜欢
    • 2020-07-26
    • 1970-01-01
    • 2019-10-27
    • 2021-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-07
    相关资源
    最近更新 更多