在c++中修改basic_ostream对象的内容,或者,删除basic_ostream对象的数据内容
Modify contents of basic_ostream object in c++ or, deleting data contents of basic_ostream object
我在函数中得到一个 ostream
对象引用。它包含一个我需要修改的字符串。
我使用 rdbuf()
函数将 ostream
的内容复制到 stringstream
中。
现在我需要将更新后的字符串流(底层字符串)复制回 ostream 对象。我该怎么做?
我搜索了擦除 ostream 内容的方法,但找不到。
注意:我无法更改其他功能的实现,即我无法使用 ostringstream
(我知道这可以解决我的问题)。
您可以尝试使用 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 可能实际上将数据写入套接字)
- 如果它适用于您的特定类型的流,您必须计算位置和长度以及覆盖的数量(如果新值的长度与您要在流中替换的旧值不同) ).
我在函数中得到一个 ostream
对象引用。它包含一个我需要修改的字符串。
我使用 rdbuf()
函数将 ostream
的内容复制到 stringstream
中。
现在我需要将更新后的字符串流(底层字符串)复制回 ostream 对象。我该怎么做?
我搜索了擦除 ostream 内容的方法,但找不到。
注意:我无法更改其他功能的实现,即我无法使用 ostringstream
(我知道这可以解决我的问题)。
您可以尝试使用 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 可能实际上将数据写入套接字)
- 如果它适用于您的特定类型的流,您必须计算位置和长度以及覆盖的数量(如果新值的长度与您要在流中替换的旧值不同) ).