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

Borrar contenido de un archivo

Estas en el tema de Borrar contenido de un archivo en el foro de C/C++ en Foros del Web. Eh buscado en google pero no e' encontrado nada que me sirva, así que pregunto por acá. La cosa es que yo tengo: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); ...
  #1 (permalink)  
Antiguo 04/09/2010, 18:18
Avatar de guzzano  
Fecha de Ingreso: julio-2010
Ubicación: Isla de Margarita
Mensajes: 162
Antigüedad: 13 años, 9 meses
Puntos: 13
Borrar contenido de un archivo

Eh buscado en google pero no e' encontrado nada que me sirva, así que pregunto por acá. La cosa es que yo tengo:
Código C:
Ver original
  1. void load()
  2. {
  3.     FILE *load;
  4.     load = fopen("Files/save/partida.hg", "r");
  5.     fread(&datos, sizeof(datos), 1, load);
  6.     fclose(load);
  7. }
  8.  
  9. void save()
  10. {
  11.     FILE *save;
  12.     save = fopen( "Files/save/partida.hg", "a" );
  13.     fwrite(&datos, sizeof(datos), 1, save);
  14.     fclose(save);
  15. }

Guarda todo normal, y carga partida normal, pero al hacerlo por segunda ves solo toma la primera partida guardada, no la segunda. Así a ver si me pueden dar una mano para borrar el contenido cuando guarde.

Saludos.

Última edición por guzzano; 04/09/2010 a las 18:24
  #2 (permalink)  
Antiguo 04/09/2010, 18:32
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años
Puntos: 228
Respuesta: Borrar contenido de un archivo

no se si una guardada tiene que solapar a la otra.pero lo que te pasa que al guardar por segunda vez se guarda a continuacion de la otra.... Y cuando lees la partida solo lees la primera y no las que siguen....

Soluciones: si queres guaardar varias partidas, a la hora de leer deberias usar fread varias veces, una por cada partida.

Si la idea es tener una sola partida en ese archivo yo le agregaria :
fseek ( pFile , 0 , SEEK_SET );

antes de fwrite. Esa funcion lo que haces es cambiar el lugar donde se va a escrivir o leer en el proximo llamado. La constate SEEK_SET lo que hace que vuelva al principio de todo.
  #3 (permalink)  
Antiguo 04/09/2010, 18:57
Avatar de guzzano  
Fecha de Ingreso: julio-2010
Ubicación: Isla de Margarita
Mensajes: 162
Antigüedad: 13 años, 9 meses
Puntos: 13
Respuesta: Borrar contenido de un archivo

Cita:
Iniciado por sam90 Ver Mensaje
no se si una guardada tiene que solapar a la otra.pero lo que te pasa que al guardar por segunda vez se guarda a continuacion de la otra.... Y cuando lees la partida solo lees la primera y no las que siguen....

Soluciones: si queres guaardar varias partidas, a la hora de leer deberias usar fread varias veces, una por cada partida.

Si la idea es tener una sola partida en ese archivo yo le agregaria :
fseek ( pFile , 0 , SEEK_SET );

antes de fwrite. Esa funcion lo que haces es cambiar el lugar donde se va a escrivir o leer en el proximo llamado. La constate SEEK_SET lo que hace que vuelva al principio de todo.
Me lo sigue guardando al final, lo tengo antes de fwrite.
Código C:
Ver original
  1. void save()
  2. {
  3.     FILE *save;
  4.     save = fopen( "Files/save/partida.hg", "a" );
  5.     fseek (save, 0 , SEEK_SET);
  6.     fwrite(&datos, sizeof(datos), 1, save);
  7.     fclose(save);
  8. }

¡Si!, solo quiero una partida única.

Saludos.
  #4 (permalink)  
Antiguo 04/09/2010, 19:05
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años
Puntos: 228
Respuesta: Borrar contenido de un archivo

Proba sacando eso que te dije, y en al funcion fopen en vez de la a, pone un "w+".

Eso te borra el archivo antes de abrir uno nuevo.
  #5 (permalink)  
Antiguo 04/09/2010, 19:08
Avatar de guzzano  
Fecha de Ingreso: julio-2010
Ubicación: Isla de Margarita
Mensajes: 162
Antigüedad: 13 años, 9 meses
Puntos: 13
Respuesta: Borrar contenido de un archivo

Cita:
Iniciado por sam90 Ver Mensaje
Proba sacando eso que te dije, y en al funcion fopen en vez de la a, pone un "w+".

Eso te borra el archivo antes de abrir uno nuevo.
Si justamente después de termina de postear, leí que con w+ se truncaba si estaba creado, y funciono. ¡Muchísimas gracias igual!
  #6 (permalink)  
Antiguo 04/09/2010, 19:31
 
Fecha de Ingreso: septiembre-2010
Mensajes: 60
Antigüedad: 13 años, 8 meses
Puntos: 5
Respuesta: Borrar contenido de un archivo

Os comento por qué no funcionaba antes: al abrir el fichero en modo append ('a'), toda escritura se hace al final, como si toda instrucción de escritura estuviera precedida por fseek(stream,0,SEEK_END);

No lo he probado, pero creo que la manera de sustituir parcialmente el contenido de un fichero es abrirlo con "open()" y después crear el correspondiente FILE* mediant fdopen(). De esta manera se puede conseguir un modo de escritura sin truncamiento.

Etiquetas: borrar, contenido
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 12:50.