4

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

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

你有什么方法可以做到这一点吗?

谢谢

4

1 回答 1

7

Boost.IostreamsTee过滤器可以将输出流分成两部分。

这是一个深受约翰内斯·绍布 ( Johannes Schaub ) 在此处回答中给出的示例的启发。

#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()返回一个空字符串。我不知道这是否是预期的行为。

于 2011-04-21T14:06:06.190 回答