繁体   English   中英

在 std::ofstream (c++) 中复制 std::cout

[英]Copy std::cout inside a std::ofstream (c++)

我目前正在尝试制作一个非常基本的“日志记录系统”,我想将 std::cout 内容复制到 std::ofstream 中以制作“日志”文件以打印我发送到 cout 的内容。

std::cout << "[LOG] My log message\n";
std::cout << "[LOG] My log message2\n";
std::ofstream s("Log.txt");
//std::cout >> s; ????????????

这就是我尝试这样做但没有成功的方式。 我希望 Log.txt 有:

[LOG] My log message
[LOG] My log message2

你不能一边吃蛋糕一边吃。 每个 stream object 只能绑定到单个缓冲区,并且std::cout不 go 向后(可以写入,但不能读取)。

因此,虽然您可以将cout重定向到 go 到任何其他 stream,但这仅对重定向发生的 output 有效。 您绝对没有办法强制之前打印到cout的数据现在出现在任何其他 stream 中,除非您有办法重新创建数据或从其他存储(不是 cout)中提取数据。

您可以通过从std::ostream派生您自己的 class 来简单地创建您自己的 T (Tee) stream。

这相当简单,基本上你只需要覆盖流syncoverflow function,并将数据发送到两个所需的输出。

您可以在此处此处找到 Tee stream 的完整示例。

在此示例代码中,我 select output 与命令行选项一起使用。 而且,它的美妙之处在于,您可以使用所有现有的 IO-stream 设施。 而且,它是完全透明的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM