1

我有这个简单的代码,需要获取正在写入的大日志文件的一部分。在某些时候,它存储从 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 标志来解决它。但是,任何人都可以提供这种效果的解释吗?

谢谢。

4

2 回答 2

1

你似乎在打电话gcountstream_loc不是my_stream

于 2010-01-14T20:08:02.643 回答
0

http://groups.google.com/group/comp.lang.c++/browse_thread/thread/709cde3942e64d6c#

于 2010-01-22T03:06:35.237 回答