我有这个简单的代码,需要获取正在写入的大型日志文件的一部分。在某个时候,它存储从中返回的当前位置
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);

我观察到的效果是 size_read 小于 size_to_read ,并且流已设置其eof标志。结束指针不应该指定流的确切位置,而read()方法返回确切的数据量吗?
很好,我可以通过检查eof标志来解决它。
但是,有人可以提供这种效果的解释吗?

谢谢。

最佳答案

您似乎在gcount而不是stream_loc上调用my_stream

09-04 17:19