代码之家  ›  专栏  ›  技术社区  ›  ilya1725

使用fstream tellg读取流的一部分直到结束

  •  1
  • ilya1725  · 技术社区  · 15 年前

    我有一个简单的代码,它需要从一个大的日志文件中获取一大块。在某一点上,它存储返回的当前位置 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标志来解决这个问题。 然而,有人能解释这种效应吗?

    谢谢。

    2 回复  |  直到 15 年前
        1
  •  1
  •   interjay    15 年前

    你好像在打电话 gcount stream_loc 而不是 my_stream .