我有一个简单的代码,它需要从一个大的日志文件中获取一大块。在某一点上,它存储返回的当前位置
streampos start=istream::tellg();
方法。
稍后,代码必须从流中读取从开始到结束的缓冲区。代码大致如下:
streampos start = my_stream.tellg();
... // do some stuff with logging
streampos end = my_stream.tellg();
const streamsize size_to_read = (end - start);
char *buf = new char[size_to_read];
lock (m_logReadLock);
{
my_stream.flush();
my_stream.seekg(start);
my_stream.read(buf, size_to_read);
size_read = my_stream->gcount();
}
unlock (m_logReadLock);
我观察到的效果是
尺寸读数
是
更小的
比
SiZeTo-To-Read
流设置了它的EOF标志。结束指针不应该准确地指定流的结束位置,read()方法是否返回确切数量的数据?
很好,我可以通过检查EOF标志来解决这个问题。
然而,有人能解释这种效应吗?
谢谢。