Scrittura di TUTTA l'output di un programma in un file txt in C++


7

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

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? 22 feb. 092009-02-22 08:01:58

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ò. 22 feb. 092009-02-22 08:06:11

  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. 22 feb. 092009-02-22 08:12:26

  0

Probabilmente dovresti menzionare il reindirizzamento stderr (con "2> x.txt" o "2> & 1" se non ricordo male.) 23 feb. 092009-02-23 01:53:18

  0

Non avresti ottenuto quello specifico, ma immagino che valga la pena aggregarlo per ricerche future (e dando il giusto credito a John e Brian). 23 feb. 092009-02-23 16:08:34


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.