【问题标题】:dupplicating std::ofstream appended content复制 std::ofstream 附加内容
【发布时间】:2011-04-21 13:18:51
【问题描述】:

我正在使用 std::ofstream 进行跟踪输出。

出于某些原因,我有时想将我在 std::ofstream 末尾附加的内容(尚未刷新或关闭)复制到另一个 std::ofstream 中;

你觉得有什么方法可以实现吗?

谢谢

【问题讨论】:

  • 目前我正在重新考虑我的问题。我使用临时的 std::stringstream,我将其附加到 ofstream 或根据需要复制它们。它可以完成这项工作。
  • 是的,我想过这个。我只是想写它(:但我想知道是否有更好的方法并放弃回答:D +1
  • 我试过了,但是 rdbuf 不能为 ofstream 设置;我不太确定它是否会起作用

标签: c++ std ofstream


【解决方案1】:

来自Boost.IostreamsTee 过滤器可以将输出流一分为二。

这是一个深受Johannes Schaub 在他的回答here 中给出的例子的启发。

#include <sstream>
#include <iostream>
#include <boost/iostreams/stream.hpp>
#include <boost/iostreams/tee.hpp>

int main()
{
    namespace io = boost::iostreams;
    typedef io::tee_device<std::ostream, std::stringstream> TeeDevice;
    typedef io::stream<TeeDevice> TeeStream;
    std::stringstream ss;
    TeeDevice teeDevice(std::cout, ss);
    TeeStream tee(teeDevice);
    tee << "Hello World\n" << std::flush;
    std::cout << "ss: " << ss.str() << "\n";
}

当我省略刷新操纵器时,ss.str() 返回一个空字符串。我不知道这是否是预期的行为。

【讨论】:

  • 是的,字符串流的行为是预期的。 stringstreambuffered,缓冲区写在flush 之后。 endl 也会刷新流。
猜你喜欢
  • 2021-10-30
  • 2017-08-10
  • 2020-11-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多