复制std::ofstream追加的内容

4

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

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

您是否考虑过实现此目标的任何方法?

谢谢


1
此刻我正在重新考虑我的问题。我使用临时的std::stringstream,将它们附加到ofstream或根据需要复制它们。这可以完成工作。 - Stephane Rolland
是的,我考虑过这个。我本来想自己写的 (: 但我在想是否有更好的方法,最后放弃回答 :D +1 - Kiril Kirov
我尝试过,但是ofstream的rdbuf不可设置;我也不太确定它会起作用。 - sehe
1个回答

7

Boost.Iostreams 中的 Tee 过滤器可以将输出流分成两个。

下面是一个例子,灵感来自 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";
}

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

是的,stringstream的行为是符合预期的。stringstream带缓冲区的,缓冲区在flush之后被写入。endl也会刷新流。 - Christian

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接