2009-02-22 108 views
7

我需要將所有程序輸出寫入文本文件。我相信這是做這種方式,將所有程序輸出寫入C++中的txt文件

sOutFile << stdout; 

其中sOutFile是創建這樣的文件ofstream的對象:

sOutFile("CreateAFile.txt"); // CreateAFile.txt is created. 

當我插入標準輸出到sOutFile對象,我得到了一些代碼,這似乎在我創建的文本文件中類似於八進制 [十六進制]代碼或某種類型的地址。

0x77c5fca0 

但是,讓我感到困惑的是,在我的程序中,我多次使用cout。大部分只是字面上的陳述。如果我沒有錯,那是程序輸出。

如果這段代碼是一個地址,它是否會包含我所有的輸出?我可以將它讀回程序並找出那種方式嗎?

我該怎麼做才能讓我的所有程序輸出寫入文本文件?

+0

我認爲,創建該文件的說法應該是「ofstream的sOutFile(」 CreateAFile.txt「);」。對? – 2009-02-22 08:01:58

回答

7

這是一個重複:this question

您可以重定向使用std::freopen標準輸出,標準錯誤和標準輸入。

從上面的鏈接:

/* freopen example: redirecting stdout */ 
#include <stdio.h> 

int main() 
{ 
    freopen ("myfile.txt","w",stdout); 
    printf ("This sentence is redirected to a file."); 
    fclose (stdout); 
    return 0; 
} 

您可以通過命令提示符下,像這樣還運行程序:

a.exe > stdout.txt 2> stderr.txt 
6

如果你想在一個文本文件中輸出所有內容,你不需要額外編寫任何代碼。

命令行:

program > output.txt 

如果你只是想重定向一定的輸出,你可以使用的ostream作爲dirkgently建議。

15

如果你的程序已經使用COUT/printf和你想要的一切,你現在輸出發送到一個文件,你可以簡單地將stdout您現有的電話前指向一個文件: http://support.microsoft.com/kb/58667

相關代碼:

freopen("file.txt", "w", stdout); 
cout << "hello file world\n"; // goes to file.txt 
freopen("CON", "w", stdout); 
printf("Hello again, console\n"); // redirected back to the console 

或者如果你只是想有些事情要打印到文件,你只想要一個普通的文件輸出流:http://www.cplusplus.com/doc/tutorial/files.html

相關代碼:

ofstream myfile; 
myfile.open("file.txt"); 
myfile << "Hello file world.\n"; 
printf("Hello console.\n"); 
myfile.close(); 

編輯從約翰·T和布萊恩·邦迪總的答案:
最後,如果你從命令行運行它,你可以將輸出重定向通過使用重定向操作其他每個人都提到「>」或追加「>>」:

myProg > stdout.txt 2> stderr.txt 
+0

附加呃...似乎是每個人都在用我的答案來做。 +1爲你的努力,雖然。 – 2009-02-22 08:06:11

3

然後,您不能在任何地方使用std :: cout從您的程序打印內容。將std :: cout更改爲std :: ostream,然後根據需要傳遞您的文件或std :: cout。

3
sOutFile << stdout; 

in C「stdout」定義爲FILE*變量。這只是一個指針。將它輸出到文件只是將指針的值寫入文件中:0x77c5fca0

如果您想要將輸出指向文件,請首先將其寫入文件,或使用命令行將程序的輸出重定向至文件。