修改c ++中basic_ostream对象的内容,或者删除basic_ostream对象的数据内容

时间:2015-06-30 07:23:14

标签: c++ stream ostream

我在函数中得到一个ostream对象引用。它包含一个我需要修改的字符串。 我使用ostream函数将rdbuf()的内容复制到stringstream。 现在我需要将更新的stringstream(底层字符串)复制回ostream对象。我怎么能这样做?

我搜索了擦除ostream内容的方法,但找不到。

注意:我无法更改其他功能的实现,即我无法使用ostringstream(我知道可以解决我的问题)。

1 个答案:

答案 0 :(得分:1)

您可以尝试使用ostream::seekp()streambuf::pubseekpos()更改流中的当前位置:

std::ofstream out;

out.seekp(-10, std::ios_base::cur); // move back 10 positions from current location
out.rdbuf()->pubseekpos(12); // move to position 12

请记住:

  • 如果数据的基础目标不支持搜索,则可能会失败(例如,streambuf实际上可能会将数据写入套接字)。
  • 如果它适用于您的特定类型的流,则必须保持位置和长度的计数以及覆盖的数量(如果新值的长度与您要在流中替换的旧值不同)。