我有这个简单的代码,需要获取正在写入的大型日志文件的一大块。在某些时候它会存储从中返回的当前位置 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标志来解决它。 但是,任何人都可以提供这种效果的解释吗?
感谢。
答案 0 :(得分:1)
您似乎在gcount
而不是stream_loc
上呼叫my_stream
。
答案 1 :(得分:0)