【问题标题】:Using fstream tellg to read a portion of the stream till the end使用 fstream tellg 读取流的一部分直到结束
【发布时间】:2010-01-14 20:02:03
【问题描述】:

我有一个简单的代码,它需要获取正在写入的大日志文件的一部分。在某些时候,它存储从返回的当前位置 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 标志来解决它。 但是,谁能解释一下这种效果?

谢谢。

【问题讨论】:

  • read() 不保证读取您给它的大小。
  • 明白这一点。问题是为什么 read() 读取小于 (end - start) 并到达流的末尾?

标签: c++ buffer fstream


【解决方案1】:

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

【讨论】:

  • 是否使用begin_stream_posbeginstart 处理同一件事另一个复制粘贴错误?
【解决方案2】:
猜你喜欢
  • 2019-01-25
  • 1970-01-01
  • 2012-10-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多