【问题标题】:Reading a file in chunks [duplicate]分块读取文件[重复]
【发布时间】:2016-03-10 00:19:13
【问题描述】:
char x[5];

ifstream i("test.txt", std::ifstream::binary);

while (i.read(x, sizeof(x))) { 
    ...
    bzero(x, sizeof(x));
}

如果文件字节大小不是 5 的倍数,则程序无法读取最后一个块。我如何确保也阅读该内容?

【问题讨论】:

  • 如果输入序列出现文件结束条件(在这种情况下,调用 setstate(failbit|eofbit))。可以使用 gcount() 查询成功提取的字符数。 en.cppreference.com/w/cpp/io/basic_istream/read
  • 如何将其合并到这里?我应该在 while 块内调用 i.gcount() 吗?

标签: c++ arrays memory file-io


【解决方案1】:

这个呢:

std::ifstream fin("test.txt", std::ifstream::binary);
std::vector<char> x(5, 0);

while (fin.read(x.data(), x.size())) 
{
    std::streamsize s = fin.gcount();

    // do something with x's data
}

【讨论】:

  • 由于某种原因似乎不起作用。我是否使用常规的 char 数组,这会有所不同吗?
  • 这个不适用于常规的 char 数组,因为data() 是 c++ 容器的内置函数。
  • fin.read(...) 在最后一个部分块(或 eof)上计算为 false。您需要在 while 循环 gcount()!=0 之外处理部分读取。
猜你喜欢
  • 1970-01-01
  • 2021-09-26
  • 2017-01-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-12
  • 1970-01-01
相关资源
最近更新 更多