将cout或cerr重定向到文件很容易。我可以使用它来将第三方输出重定向到文件。但是,将第三方输出重定向到文件后,如何使用cout自己输出到控制台?

最佳答案

我是RAII的忠实拥护者,所以我曾经写过这个小 helper 课。它将重定向流,直到超出范围为止,这时它将还原原始缓冲区。非常方便。 :)

class StreamRedirector {
public:
    explicit StreamRedirector(std::ios& stream, std::streambuf* newBuf) :
        savedBuf_(stream.rdbuf()), stream_(stream)
    {
        stream_.rdbuf(newBuf);
    }

    ~StreamRedirector() {
        stream_.rdbuf(savedBuf_);
    }

private:
    std::streambuf* savedBuf_;
    std::ios& stream_;
};

可以这样使用:
using namespace std;
cout << "Hello stdout" << endl;
{
    ofstream logFile("log.txt");
    StreamRedirector redirect(cout, logFile.rdbuf());
    cout << "In log file" << endl;
}
cout << "Back to stdout" << endl;

07-24 09:46
查看更多