假设此文件长2和1/2块,块大小为1024.
aBlock = 1024;
char* buffer = new char[aBlock];
while (!myFile.eof()) {
myFile.read(buffer,aBlock);
//do more stuff
}
第三次读取时,它将写入缓冲区的一半,另一半则写入无效数据。有没有办法知道它实际写入缓冲区的字节数是多少?
答案 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
,它实际上会返回读取的字节数。