2009-02-22 12 views
7

Ho bisogno di scrivere tutto l'output del mio programma in un file di testo. Credo che sia fatto in questo modo,Scrittura di TUTTA l'output di un programma in un file txt in C++

sOutFile << stdout; 

dove sOutFile è l'oggetto ofstream che crea il file in questo modo:

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

Quando si inserisce lo stdout nell'oggetto sOutFile, ho un po 'di codice che sembra per somigliare al codice ottale [esadecimale] o ad un indirizzo di qualche tipo nel file di testo che ho creato.

0x77c5fca0 

Ma ciò che mi confonde è che nel mio programma uso più volte il cout. Per lo più solo affermazioni letterali. Se non sbaglio è l'uscita del programma.

Se questo codice è un indirizzo, conterrebbe tutto il mio output? Potrei leggere di nuovo il programma e scoprire in che modo?

Cosa posso fare per ottenere TUTTO l'output del mio programma scritto in un file di testo?

+0

Penso che la dichiarazione che crea il file dovrebbe essere 'ofstream sOutFile (" CreateAFile.txt ");'. Destra? –

risposta

7

Questo è un duplicato di: this question

È possibile reindirizzare stdout, stderr e stdin utilizzando std::freopen.

dal link qui sopra:

/* 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; 
} 

È inoltre possibile eseguire il programma tramite prompt dei comandi in questo modo:

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

Se si desidera che tutto l'output in un file di testo non sia necessario codificare qualcosa in più.

dalla riga di comando:

program > output.txt 

Se solo si desidera reindirizzare certi di uscita è possibile utilizzare ostream come dirkgently suggerito.

15

Se il programma utilizza già cout/printf e si desidera inviare il tutto attualmente output in un file, si può semplicemente reindirizzare stdout per puntare a un file prima le chiamate esistenti: http://support.microsoft.com/kb/58667

codice rilevante:

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 

In alternativa, se si desidera solo alcune cose per essere stampati in un file, si desidera solo un flusso di output file regolare: http://www.cplusplus.com/doc/tutorial/files.html

codice rilevante:

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

EDIT alle risposte aggregate da John T e Brian Bondy:
Infine, se si sta eseguendo da riga di comando, si può semplicemente reindirizzare l'output di tutti gli altri di cui parla utilizzando l'operatore di reindirizzamento ">" oppure aggiungi ">>":

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

l'aggiunta di eh ... sembra essere quello che tutti stanno facendo con la mia risposta alla loro. +1 per i tuoi sforzi però. –

+0

Joel ha detto che una buona cosa da fare è tornare a una domanda e combinare tutte le buone risposte. È un lavoro sporco, ma qualcuno deve farlo. Ed è sciocco lasciare una risposta incompleta mentre altre persone forniscono suggerimenti a cui non pensi, quindi cerco di votarti e aggiungerlo anche al mio. –

+0

Probabilmente dovresti menzionare il reindirizzamento stderr (con "2> x.txt" o "2> & 1" se non ricordo male.) – aib

3

Quindi non è possibile utilizzare std :: cout altrove per stampare materiale dal programma. Cambia std :: cout in uno std :: ostream e poi passa il tuo file o std :: cout come richiesto.

3
sOutFile << stdout; 

in C "stdout" è definito come variabile FILE*. È solo un puntatore. L'output in un file scrive solo il valore del puntatore, nel tuo caso: 0x77c5fca0 nel file.

Se si desidera indirizzare l'output su un file, scriverlo in primo luogo o reindirizzare l'output del programma su un file utilizzando la riga di comando.