era*_*ros 3 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
}
Run Code Online (Sandbox Code Playgroud)
它第三次读取时,它将写入缓冲区的一半,而另一半则写入无效数据.有没有办法知道它实际写入缓冲区的字节数?
istream :: gcount返回上一次读取读取的字节数.
您的代码过于复杂且容易出错.
读取循环并仅检查eof是一个逻辑错误,因为如果在读取时出现错误(无论出于何种原因),这将导致无限循环.
相反,您需要检查流的所有失败状态,这可以通过简单地检查istream对象本身来完成.
由于这已经被read函数返回,你可以(并且实际上应该)构造任何读取器循环,如下所示:
while (myFile.read(buffer, aBlock))
process(buffer, aBlock);
process(buffer, myFile.gcount());
Run Code Online (Sandbox Code Playgroud)
这同时更短,不会隐藏错误并且更具可读性,因为check-stream-state-in-loop是已建立的C++习惯用法.
| 归档时间: |
|
| 查看次数: |
3209 次 |
| 最近记录: |