2010-07-17 20 views
5

Estoy intentando escribir datos de consola en un archivo de texto separado en cpp. Alguien me ayude con el código de muestra.¿Cómo escribir la salida de la consola en un archivo de texto en cpp?

+1

¿datos de la consola de qué proceso? tu propio proceso? algún otro proceso que crees? – shoosh

+0

¿Qué es "datos de consola"? ¿Cómo se ve tu enfoque actual? – Philipp

+2

Cualquiera que busque una respuesta, busque la respuesta del usuario11977. Es el correcto. –

Respuesta

18

Existen varias formas de hacerlo. Puede redirigirlo desde la línea de comando con programname > out.txt. O puede usar freopen("out.txt","w",stdout); al comienzo de su programa.

+0

Esto estaba funcionando bien para mí. Pero de repente las salidas de la consola cmd eran completamente invisibles. Cuando eliminé esta línea, las salidas de cmd eran visibles atrás –

0

Si desea crear un proceso hijo y redirigir su salida se podría hacer algo como esto:

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

solo relevante con pthreads ... – shoosh

1

Si desea escribir de su propio proceso, me gustaría sugerir un método de impresión sencilla

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

a continuación, puede llamar

print("Print this", cout); 

para la salida de la consola, o

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

para escribir en un archivo "filename.out". Por supuesto, usted gana más, si print es un método de clase que genera toda la información específica del objeto que necesita y de esta manera puede dirigir la salida fácilmente a diferentes flujos.

+2

La función 'print' que ha definido casi no tiene ningún beneficio. También puede escribir 'cout <<" Imprimir esto ";' para su primer ejemplo y 'filestream <<" Imprimir esto ";" en el segundo ejemplo. A menos que 'print' agregue algo de lógica extra (tal vez escribiendo una marca de tiempo o quizás escribiendo en una salida estándar y un archivo), no hay beneficio para tal función. –

0

bbtrb escribió:

impresión de vacío (const cadena str, ostream & salida) { salida < < str; }

Mejor que esto es por supuesto

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

de modo que usted puede incluso tener la corriente de salida manipulada devuelto por la función.

0

smerrimans respuesta debería ayudarlo.

También existe la opción de implementar su propio streambuf y usarlo con std :: cout y std :: cerr para almacenar las copias en el archivo en lugar de imprimir en la consola. Lo hice hace un tiempo para redirigir las impresiones a algún tipo de registros rotativos con marcas de tiempo.

Necesitará leer un poco sobre cómo funciona y this book me ayudó a hacerlo bien.

Si eso no es lo que buscas, es un poco exagerado.

Cuestiones relacionadas