2010-07-17 51 views
5

我試圖將控制檯數據寫入cpp中的單獨文本文件。任何人都可以用示例代碼來幫助我。如何將控制檯輸出寫入cpp中的文本文件?

+1

控制檯數據的過程是什麼?你自己的過程?您創建的其他一些流程? – shoosh 2010-07-17 09:17:27

+0

什麼是「控制檯數據」?你目前的方法如何? – Philipp 2010-07-17 09:19:20

+2

任何搜索答案的人都會查找user11977的答案。這是正確的。 – 2015-09-05 15:55:56

回答

18

有多種方法可以做到這一點。您可以使用programname > out.txt從命令行重定向它。或者您可以在程序開始時使用freopen("out.txt","w",stdout);

+0

這對我來說很好。但突然間,cmd控制檯輸出完全不可見。當我刪除這一行時,cmd輸出可見返回 – 2015-09-09 19:53:05

0

如果你想創建一個子進程,並重定向它的輸出,你可以做這樣的事情:

FILE* filePtr = popen("mycmd"); 
FILE* outputPtr = fopen("myfile.txt"); 

if(filePtr && outputPtr) { 
    char tmp; 
    while((tmp = getc(filePtr)) != EOF) 
     putc(tmp, outputPtr); 

    pclose(filePtr); 
    fclose(outputPtr); 
} 
+0

僅與pthreads相關... – shoosh 2010-07-17 10:19:28

1

如果您想從自己的過程寫,我建議一個簡單的打印方法

void print(const string str, ostream & output) 
{ 
    output << str; 
} 

然後就可以調用

print("Print this", cout); 

控制檯輸出,或

ofstream filestream("filename.out"); 
print("Print this", filestream); 

寫入文件「filename.out」。當然,如果print是一個輸出所有對象特定信息所需的類方法,那麼您可以獲得最多,這樣您就可以將輸出輕鬆地導向不同的流。

+2

您定義的'print'函數幾乎沒有任何好處。在第二個例子中,你可以簡單地寫'cout <<「打印這個」;'爲你的第一個例子和'filestream <<「打印這個」;「除非'print'添加一些額外的邏輯(可能寫一個時間戳或也許寫入標準輸出和文件),這樣的功能沒有任何好處。 – 2010-07-17 17:23:35

0

bbtrb寫道:

空隙打印(常量字符串str,ostream的& 輸出){ 輸出< < STR; }

比這更好的

當然

ostream& output(ostream& out, string str) {out << str; return out;} 

,讓您甚至可以通過該函數返回的操作輸出流。

0

smerrimans答案應該幫助你。

還有一個選項可以實現自己的streambuf,並將其與std :: cout和std :: cerr一起使用來將打印輸出存儲到文件中,而不是打印到控制檯。我前一陣子將打印輸出重定向到帶有時間戳的某些旋轉日誌。

您需要詳細瞭解它是如何工作的,this book幫助我解決問題。

如果這不是你想要的,但它有點矯枉過正。

相關問題