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

Creando el contenido antes que el fichero

Estas en el tema de Creando el contenido antes que el fichero en el foro de C/C++ en Foros del Web. Hola! Tengo una duda con los ficheros y su contenido, tengo que hacer una clase que sea capaz de guardar los errores que se produzcan ...
  #1 (permalink)  
Antiguo 11/10/2010, 18:47
 
Fecha de Ingreso: marzo-2009
Mensajes: 79
Antigüedad: 15 años, 1 mes
Puntos: 0
Pregunta Creando el contenido antes que el fichero

Hola! Tengo una duda con los ficheros y su contenido, tengo que hacer una clase que sea capaz de guardar los errores que se produzcan en un fichero, pero el nombre de ese fichero no me lo dan a no ser que se pidan los errores, es decir...

Código:
void
MiClase::GuardarErrores(string filename)
{	
	ofstream fo;
	fo.open(filename.c_str(),ios::out);
	
	if (fo.is_open())
	{	
		fo<<errores;		
	
		fo.close();
	}
}

...

int main()
{
	MiClase ejemplo;
	ejemplo.Ejecutar();
	ejemplo.GuardarErrores("fichero.sal");
}

...yo tengo una clase (MiClase) , donde se ejecutan acciones, se producen errores y los acumulo, y en algún momento podría llamar a un método MiClase::GuardarErrores(string ficheroSalida), y en ese momento se deberían recoger los errores y guardarlos en un fichero con el nombre indicado.

Acumular los errores en un string parece poco "elegante".

¿Qué debería usar para acumular los errores?
  #2 (permalink)  
Antiguo 12/10/2010, 16:56
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años
Puntos: 228
Respuesta: Creando el contenido antes que el fichero

Y puedes usar un string. Como identificar cada error con un numero. Luego cuando se produce un error en una lista guardas el numero de error.

Luego cuandos guardas en un fichero, simplemente lees la lista el numero y imprimes en el fichero los uqe correspondo.
  #3 (permalink)  
Antiguo 13/10/2010, 13:42
 
Fecha de Ingreso: marzo-2009
Mensajes: 79
Antigüedad: 15 años, 1 mes
Puntos: 0
Respuesta: Creando el contenido antes que el fichero

¿Te refieres a hacer un indice de errores? ... mmm, es que entonces serian mensajes ya definidos y no podrías dar información extra del tipo, "Se produjo un error al insertar X en Y".
  #4 (permalink)  
Antiguo 13/10/2010, 16:26
 
Fecha de Ingreso: febrero-2003
Ubicación: D.F.
Mensajes: 163
Antigüedad: 21 años, 2 meses
Puntos: 22
Respuesta: Creando el contenido antes que el fichero

Te puede servir que utilices stringstream.

Ejemplo:

Código C++:
Ver original
  1. #include <iostream>
  2. #include <fstream>
  3. #include <sstream>
  4. using namespace std;
  5.  
  6.  
  7. class MyClass{
  8.     stringstream log;
  9. public:
  10.     void someFunction(){
  11.         // code...
  12.         // ouch!
  13.         log << "my error string 1 in someFunction()" << endl;
  14.         // code...
  15.         // ouch!
  16.         log << "my error string 2 in someFunction()" << endl;
  17.     }
  18.  
  19.     void anotherFunction(){
  20.         // code...
  21.         // ouch!
  22.         log << "my error string 1 in anotherFunction()" << endl;
  23.         // code...
  24.     }
  25.  
  26.     void saveErrors(const string& fname){
  27.         ofstream out(fname.c_str());
  28.         out << log.rdbuf();
  29.     }
  30. };
  31.  
  32. int main(){
  33.     MyClass mc;
  34.     mc.someFunction();
  35.     mc.anotherFunction();
  36.     mc.saveErrors("myErrorLog.txt");
  37.     return 0;
  38. }
  #5 (permalink)  
Antiguo 14/10/2010, 12:47
 
Fecha de Ingreso: marzo-2009
Mensajes: 79
Antigüedad: 15 años, 1 mes
Puntos: 0
Sonrisa Respuesta: Creando el contenido antes que el fichero

Es... ¡perfecto!
Había mirado en cplusplus lo que aceptaba el operador << para ver que podía usar, lo intente con streambuf *, ostream y también creando un ofstream que acumulase los errores y después copiarlo, pero creo que no los usaba bien, ese es justo lo que buscaba.
¡Muchas gracias a todos!

Etiquetas: c++, clases, ficheros
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 18:39.