2009-02-22 41 views
7

Necesito escribir toda la salida de mi programa en un archivo de texto. Creo que se hace de esta manera,Escribir TODO el resultado del programa en un archivo txt en C++

sOutFile << stdout; 

donde sOutFile es el objeto ofstream que crea el archivo de esta manera:

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

Al insertar el stdout en el objeto sOutFile, me sale algo de código que parece para parecerse a octal código [hexadecimal] o una dirección de algún tipo en el archivo de texto que he creado.

0x77c5fca0 

Pero lo que me resulta confuso es que en mi programa utilizo cout varias veces. En su mayoría solo declaración literal. Si no me equivoco, esa es la salida del programa.

Si este código es una dirección, ¿contendría todo mi resultado? ¿Podría volver a leerlo en el programa y descubrirlo de esa manera?

¿Qué puedo hacer para obtener TODA la salida de mi programa escrita en un archivo de texto?

+0

Creo que la declaración que crea el archivo debe ser 'ofstream sOutFile (" CreateAFile.txt "); '. ¿Derecha? –

Respuesta

7

Este es un duplicado de: this question

Puede redirigir stdout, stderr y la entrada estándar usando std::freopen.

Desde el enlace de arriba:

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

También puede ejecutar su programa a través de línea de comandos, así:

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

Si quiere todos los resultados en un archivo de texto, no necesita codificar nada extra.

desde la línea de comandos:

program > output.txt 

Si sólo desea redireccionar ciertos salida puede utilizar ostream como se sugiere dirkgently.

15

Si el programa ya utiliza cout/printf y desea enviar TODO lo que actualmente salida a un archivo, simplemente podría redirigir stdout para que apunte a un archivo antes de las llamadas existentes: http://support.microsoft.com/kb/58667

código relevante:

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 

alternativa si lo que desea Algunas cosas que pueden imprimir a un archivo, lo que desea una corriente de salida de archivo normal: http://www.cplusplus.com/doc/tutorial/files.html

código relevante:

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

EDIT para respuestas agregadas de John T y Brian Bondy:
Por último, si se está ejecutando desde la línea de comandos, sólo puede redirigir la salida como todos los demás mencionados mediante el operador de redirección ">" o añada ">>":

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

añadiendo eh ... parece ser lo que todos están haciendo con mi respuesta a la de ellos. +1 por sus esfuerzos sin embargo. –

+0

Joel dijo que algo bueno que hacer es volver a una pregunta y combinar todas las buenas respuestas ... es un trabajo sucio, pero alguien tiene que hacerlo. Y es una tontería dejar una respuesta incompleta ya que otras personas ofrecen sugerencias en las que no se piensa, así que trato de votar y agregarlas a la mía también. –

+0

Probablemente también deberías mencionar la redirección de stderr (con "2> x.txt" o "2> & 1" si no recuerdo mal) – aib

3

Entonces no puede usar std :: cout en ningún otro lugar para imprimir cosas de su programa. Cambie std :: cout a std :: ostream y luego pase su archivo o std :: cout según sea necesario.

3
sOutFile << stdout; 

en C "stdout" se define como una variable FILE*. Es solo un puntero. Al enviarlo a un archivo solo se escribe el valor del puntero, en su caso: 0x77c5fca0 en el archivo.

Si desea dirigir su salida a un archivo, puede escribirlo en primer lugar o redirigir la salida de su programa a un archivo usando la línea de comando.

Cuestiones relacionadas