簡體   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