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

[SOLUCIONADO] Escribir archivo .txt sin sobreescribir los datos anteriores

Estas en el tema de Escribir archivo .txt sin sobreescribir los datos anteriores en el foro de C/C++ en Foros del Web. Buenas, Estoy haciendo un pequeño log para un programilla en c++, lo que quiero hacer y hago es leer y escribir un archivo de texto. ...
  #1 (permalink)  
Antiguo 02/01/2015, 04:37
 
Fecha de Ingreso: noviembre-2012
Mensajes: 136
Antigüedad: 12 años
Puntos: 0
Escribir archivo .txt sin sobreescribir los datos anteriores

Buenas,

Estoy haciendo un pequeño log para un programilla en c++, lo que quiero hacer y hago es leer y escribir un archivo de texto. En la misma ejecucción todo sale OK, escribo linea a linea y una debajo de la otra.
El problema, es que en la siguiente ejecucción se me sobrescribe todo lo anterior.
Alguna ayudita?

Este es mi codigo:

Código C++:
Ver original
  1. int main( int argc, char** argv )
  2. {
  3.    
  4.    
  5.     char cadena[128];
  6.     time_t t;
  7.     struct tm *tm;
  8.     char fechayhora[100];
  9.     ofstream fs;
  10.     t=time(NULL);
  11.     tm=localtime(&t);
  12.     strftime(fechayhora, 100, "%d/%m/%Y %H:%M:%S ", tm);
  13.     string nuevoNombreFoto;
  14.     string nuevo_nombre;
  15.      
  16.     // Crea un fichero de salida
  17.     fs.open("log_C++.txt",std::ios::ate);
  18.    
  19.    
  20.     // Enviamos una cadena al fichero de salida:
  21.     fs <<fechayhora << "- Iniciando procesado de imagen" << endl;
  22.    
  23.    
  24.     if(argv[1] != NULL)
  25.     {
  26.         fs << "El primer argumento en la ejecucion es:" << argv[1] << endl;
  27.         nuevoNombreFoto = string(argv[1]) ;
  28.         string original = nuevoNombreFoto;
  29.         string parte = ".";
  30.         nuevo_nombre = original.substr( 0, original.find( parte )) +"_tratada.jpg"  ;
  31.         fs << "El nuevo nombre esssss: "<<nuevo_nombre << endl;
  32.        
  33.  
  34.     }
  35.     else
  36.     {
  37.         cout << "El primer argumento en la ejecucion es NULL o no se ha introducido una imagen\n\n";
  38.         fs << "El primer argumento en la ejecucion es NULL o no se ha introducido una imagen\n\n";
  39.         system("PAUSE");
  40.     }
  41.  
  42.     t=time(NULL);
  43.     tm=localtime(&t);
  44.     strftime(fechayhora, 100, "%d-%m-%Y %H:%M:%S ", tm);
  45.     cout << nuevo_nombre;
  46.    // Enviamos una cadena al fichero de salida:
  47.    fs <<fechayhora << "- Procesado de imagen finalizado" << endl;
  48.    // Cerrar el fichero,
  49.    // para luego poder abrirlo para lectura:
  50.    fs.close();
  51.    
  52.  
  53.      
  54.  
  55. }
  #2 (permalink)  
Antiguo 02/01/2015, 05:47
Avatar de vangodp  
Fecha de Ingreso: octubre-2013
Mensajes: 934
Antigüedad: 11 años, 1 mes
Puntos: 38
Respuesta: Escribir archivo .txt sin sobreescribir los datos anteriores

En la linea 17 tienes el modo de de apertura std::ios::ate. Para seguir añadiendo al final del fichero mejor sera que pongas el flag flag append que se explica en ese video: https://www.youtube.com/watch?v=iUVcCq1r8HE

Y aquí tienes los modos de apertura: http://www.cplusplus.com/reference/f.../fstream/open/

Básicamente es sustituir at end(ate) por a append(app)

En esta pagina: http://v1.minidosis.org/C++/

...esta esta el capitulo 7. Entrada-Salida: http://v1.minidosis.org/C++/Entrada-Salida/

..Tienes algunos vídeos interesantes sobre el tema:
http://v1.minidosis.org/C++/Entrada-...0la%20Entrada/
http://v1.minidosis.org/C++/Entrada-...0un%20Fichero/
http://v1.minidosis.org/C++/Entrada-...0un%20Fichero/
...y el que te mencione sobre modos de apertura
http://v1.minidosis.org/C++/Entrada-...de%20Apertura/

Esta pagina me servio mucho en mis inicios, y aun me sirve mucho >_<
Suerte!
  #3 (permalink)  
Antiguo 02/01/2015, 10:42
 
Fecha de Ingreso: noviembre-2012
Mensajes: 136
Antigüedad: 12 años
Puntos: 0
Respuesta: Escribir archivo .txt sin sobreescribir los datos anteriores

Muchas gracias crack ya lo tengo resulto.

Un saludo

Etiquetas: anteriores, char, int, sobreescribir, string, txt
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 14:26.