假设这个文件的长度是2个半块,块大小为1024。
aBlock = 1024;
char* buffer = new char[aBlock];
while (!myFile.eof()) {
myFile.read(buffer,aBlock);
//do more stuff
}
第三次读取时,它将写入缓冲区的一半,留下另一半无效数据。有没有办法知道它实际写入了多少字节到缓冲区?
eof
的循环是一个逻辑错误,因为如果在读取时发生错误(无论什么原因),这将导致无限循环。istream
对象本身来完成。read
函数返回,因此你可以(而且确实应该)像这样构造任何读取器循环:while (myFile.read(buffer, aBlock))
process(buffer, aBlock);
process(buffer, myFile.gcount());
这种方法更短,不会隐藏错误,并且更易读,因为在循环中检查流状态是一种成熟的C++习惯用法。
gcount
,所以如果你将实际处理交给一个函数,那么上述代码只需要在结尾调用一个额外的函数即可。我会修改答案的。 - Konrad Rudolphistream::readsome
,它实际上返回读取的字节数量。
buffer
变量)。 - Konrad Rudolph