Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Salida estandar.

Estas en el tema de Salida estandar. en el foro de C/C++ en Foros del Web. Hola familia. Estoy haciendo un programa y necesito que haya un modo en el que la salida se vuelque a un fichero. El tema es ...
  #1 (permalink)  
Antiguo 29/04/2013, 12:09
 
Fecha de Ingreso: marzo-2013
Mensajes: 10
Antigüedad: 11 años, 8 meses
Puntos: 0
Salida estandar.

Hola familia. Estoy haciendo un programa y necesito que haya un modo en el que la salida se vuelque a un fichero. El tema es que no se como redireccionar la salida estandar a un fichero, es decir, cuando hago
cout<<"Lo que sea";
que directamente escriba en un fichero.
Lo he intentado de la siguiente manera pero no funciona, no se si es que me falta algo.
Código C++:
Ver original
  1. // Creamos un archivo de salida para logging.
  2.       ofstream test_log;
  3.       test_log.open("test.log");
  4.  
  5.       // Obtenemos el streambuf actual de clog (esto
  6.       // lo usaremos luego para restaurar el streambuf
  7.       // a su valor original, por si las moscas).
  8.       streambuf* old_rdbuf = clog.rdbuf();
  9.  
  10.       // Reemplazamos el streambuf de clog con el del archivo.
  11.       // Ahora ambos streams utilizarán el mismo streambuf (es
  12.       // decir, escriben en el archivo test.log).
  13.       clog.rdbuf(test_log.rdbuf());
Gracias de antemano a todos y un saludo.
  #2 (permalink)  
Antiguo 30/04/2013, 05:51
 
Fecha de Ingreso: junio-2010
Ubicación: Madrid
Mensajes: 620
Antigüedad: 14 años, 5 meses
Puntos: 73
Respuesta: Salida estandar.

Si el programa es en modo texto, desde la consola ejecutas, por ejemplo,

mi_programa > salida.txt

con lo que todo lo que mandes a la pantalla te lo enviará al archivo salida.txt.

Si no es eso lo que buscas, en C (no estoy muy ducho en C++) se podría hacer, por ejemplo,

Código C:
Ver original
  1. int main(void)
  2. {
  3.     int     volcar;
  4.     double  x;
  5.     FILE    *Archivo;
  6.  
  7.     // volcar=0 te enviará la salida a la pantalla
  8.     // volcar=1 te enviará la salida al archivo "salida.txt"
  9.     volcar = 1;
  10.     if (volcar)
  11.         Archivo = fopen("Salida.txt", "w");
  12.     else
  13.         Archivo = stdout;
  14.     x = 1.0;
  15.     fprintf(Archivo, "X = %f\n", x);
  16.     fclose(Archivo);
  17.     return 0;
  18. }

dado que printf(...) equivale a fprintf(stdout, ...).

En C++ quizá se pueda sobrecargar cout para hacer algo parecido (sé que C++ permite la sobrecarga de funciones, pero no sé si con cout se puede).
  #3 (permalink)  
Antiguo 03/05/2013, 04:45
 
Fecha de Ingreso: marzo-2013
Mensajes: 10
Antigüedad: 11 años, 8 meses
Puntos: 0
Respuesta: Salida estandar.

Muchas gracias FX190, pero no es eso exactamente lo que busco. Lo que quiero es que al poner directamente cout lo vuelque en un fichero. Lo que he hecho es
freopen("log.txt","w",stdout);
Pero me lanza un warning. Si alguien tiene alguna idea para solventarlo gracias ;).
  #4 (permalink)  
Antiguo 03/05/2013, 07:22
 
Fecha de Ingreso: agosto-2012
Mensajes: 601
Antigüedad: 12 años, 3 meses
Puntos: 83
Respuesta: Salida estandar.

Tienes que hacerlo tal como te comentó Fw190 sobrecargando el objeto en una nueva clase o bien reasignando la salida tal como harias en C; te comento la forma facil que consiste en reasignar la salida:

Código:
//abres un puntero al archivo
ofstream archivo("salida.txt");

//guardas una referencia del stdout, esto es opcional
streambuf *cpp_stdout = std::cout.rdbuf();

//reasignas el stream de salida
cout.rdbuf(archivo.rdbuf());

//te diviertes un rato
cout << "era mas facil de lo que pensaba";

//y restauras el stdout original que guardaste anteriormente, esto es opcional
cout.rdbuf(cpp_stdout);
Puedes hacer lo mismo con una clase sobrecargando el operador, pero eso normalmente se reserva para trabajar tipos de datos no sobrecargados por defecto por cout.

Saludos
vosk
  #5 (permalink)  
Antiguo 03/05/2013, 14:10
 
Fecha de Ingreso: julio-2012
Mensajes: 375
Antigüedad: 12 años, 4 meses
Puntos: 28
Respuesta: Salida estandar.

¿Estas seguro que es lo que buscas? El operador << también existen en los ofstream:

Código C++:
Ver original
  1. ofstream Salida;
  2. Salida.open("Nombres.txt");
  3.  
  4. Salida<<"Entrando datos..."<<endl;
  #6 (permalink)  
Antiguo 05/05/2013, 05:08
 
Fecha de Ingreso: marzo-2013
Mensajes: 10
Antigüedad: 11 años, 8 meses
Puntos: 0
Respuesta: Salida estandar.

Muchisimas gracias a todos. Todo resuelto ;).

Etiquetas: funcion, int, programa, salida
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:37.