C ++读取缓冲区大小

时间:2011-06-22 18:42:23

标签: c++ file-io buffer

假设此文件长2和1/2块,块大小为1024.

aBlock = 1024;
char* buffer = new char[aBlock];
while (!myFile.eof()) {
    myFile.read(buffer,aBlock);
    //do more stuff
}

第三次读取时,它将写入缓冲区的一半,另一半则写入无效数据。有没有办法知道它实际写入缓冲区的字节数是多少?

3 个答案:

答案 0 :(得分:7)

istream::gcount返回上一次读取读取的字节数。

答案 1 :(得分:5)

您的代码过于复杂且容易出错。

在循环中读取并仅检查eof是一个逻辑错误,因为如果在读取时出现错误(无论出于何种原因),这将导致无限循环。

相反,您需要检查流的所有失败状态,这可以通过简单地检查istream对象本身来完成。

由于read函数已经返回了这个函数,你可以(并且实际上应该)构造任何类似的读取器循环:

while (myFile.read(buffer, aBlock))
    process(buffer, aBlock);
process(buffer, myFile.gcount());

这同时更短,不会隐藏错误并且更具可读性,因为check-stream-state-in-loop是已建立的C ++习惯用法。

答案 2 :(得分:0)

您还可以查看istream::readsome,它实际上会返回读取的字节数。