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

no se guardan los datos en el archivo binario

Estas en el tema de no se guardan los datos en el archivo binario en el foro de C/C++ en Foros del Web. hola gente!, quiero guardar los datos que tengo de una lista enlazada a un archivo binario y no se me guardan en el archivo, no ...
  #1 (permalink)  
Antiguo 02/01/2012, 15:46
 
Fecha de Ingreso: diciembre-2011
Ubicación: Crespo - Entre Rios
Mensajes: 155
Antigüedad: 12 años, 4 meses
Puntos: 25
no se guardan los datos en el archivo binario

hola gente!, quiero guardar los datos que tengo de una lista enlazada a un archivo binario y no se me guardan en el archivo, no me da error tampoco de que no lo hizo:

esta es la implementacion que utilizo para guardar:

Código C++:
Ver original
  1. bool Lista_Producto::Guardar_Lista(){
  2.  
  3. if (FILE *Archi= fopen("datos.dat", "wb")){
  4.  
  5. Producto *Aux= this->Primero;
  6.  
  7. while (Aux != NULL){
  8.  
  9. PR->Nombre= Aux->Nombre;
  10. PR->Precio= Aux->Precio;
  11. PR->Tipo= Aux->Tipo;
  12. PR->SubTipo= Aux->SubTipo;
  13.  
  14. fwrite(PR, sizeof(PR), 1, Archi);
  15.  
  16. Aux= Aux->Siguiente;
  17. }
  18.  
  19. fclose(Archi);
  20.  
  21. return 1;
  22. }else return 0;
  23.  
  24. };


PR corresponde al siguiente struct:

Código C++:
Ver original
  1. struct Producto_Auxiliar{UnicodeString Nombre;
  2.                          float Precio;
  3.                          UnicodeString Tipo, SubTipo;
  4.                          Producto_Auxiliar(){}} *PR;


estoy usando c++ builder, si necesitan algun dato mas avisenme

Saludos. voy a seguir intentando pero me tengo que ir a trabajar en un rato
  #2 (permalink)  
Antiguo 02/01/2012, 16:17
Avatar de CapacProg  
Fecha de Ingreso: marzo-2010
Ubicación: Lima - Perú
Mensajes: 324
Antigüedad: 14 años
Puntos: 71
Respuesta: no se guardan los datos en el archivo binario

Intente cambiando esta línea:
Código C++:
Ver original
  1. fwrite(PR, sizeof(PR), 1, Archi);
por
Código C++:
Ver original
  1. fwrite(PR, sizeof(*PR), 1, Archi);
ojo que cambie a *PR.

Sino trate de alojar memoria al struct ya que en si PR es un puntero y no veo bien que se este asignado valores a los campos del struct sin tener memoria.
__________________
%
El mejor guerrero no es el que triunfa siempre sino el que vuelve sin miedo a la batalla.
%
  #3 (permalink)  
Antiguo 03/01/2012, 09:05
 
Fecha de Ingreso: diciembre-2011
Ubicación: Crespo - Entre Rios
Mensajes: 155
Antigüedad: 12 años, 4 meses
Puntos: 25
Respuesta: no se guardan los datos en el archivo binario

al parecer el problema no era con el codigo, sino en la carpeta donde yo estaba mirando.

resulta que tengo mi proyecto guardado en una carpeta, donde estan almacenados todos los
archivos del programa y el archivo "datos.dat". Al compilar, se crea una nueva carpeta llamada Debug dentro de la carpeta de mi proyecto, ahi es donde se guardaba mi verdadero archivo datos.dat con la informacion y yo pensaba que estaba mal porque el codigo que si esta mal es el que se encarga de cargar la informacion y al correr el programa mis variables no contenian datos.

jejej, gracia igal por la ayuda. saludos
  #4 (permalink)  
Antiguo 11/01/2012, 08:33
 
Fecha de Ingreso: diciembre-2011
Ubicación: Crespo - Entre Rios
Mensajes: 155
Antigüedad: 12 años, 4 meses
Puntos: 25
Respuesta: no se guardan los datos en el archivo binario

volviendo a retornar esto, lo habia dejado y avanzado con otras cosa pero ahora necesito solucionarlo bien....

ahora el problema no se si es que no se guardan los datos o los leo mal.

para guardar uso el siguiente codigo:

Código C++:
Ver original
  1. bool Lista_Producto::Guardar_Lista(){
  2.  
  3. if (FILE *Archi= fopen("datos.dat", "wb")){
  4.  
  5. Producto *Aux= this->__Primero;
  6. Producto_Auxiliar PR;
  7.  
  8.  
  9. while (Aux){
  10.  
  11. //se le asigna al struct PR los datos que se van a almacenar
  12. PR.Nombre= Aux->__Nombre;
  13. PR.Tipo= Aux->__Tipo;
  14. PR.SubTipo= Aux->__SubTipo;
  15. PR.Precio= Aux->__Precio;
  16.  
  17. //se guarda en el archivo los datos
  18. fwrite(&PR, sizeof PR, 1, Archi);
  19.  
  20. Aux= Aux->__Siguiente;
  21. }
  22.  
  23. fclose(Archi);
  24. }else return 0;
  25. return 1;
  26. };

y para cargar:

Código C++:
Ver original
  1. bool Lista_Producto::Cargar_Lista(){
  2.  
  3. unsigned long int Tamanio;
  4.  
  5. if (FILE *Archi= fopen("datos.dat", "rb")) {
  6.  
  7. //se obtiene el tamaño del archivo
  8. fseek(Archi, 0, SEEK_END);
  9. Tamanio= ftell(Archi);
  10.  
  11. //se retorna el puntero al principio del archivo
  12. rewind(Archi);
  13.  
  14.  
  15. Producto_Auxiliar PR;
  16.  
  17.  
  18. while (Tamanio != 0){
  19.  
  20. //se lee del archivo un bloque y se guarda en PR
  21. fread(&PR, sizeof PR, 1, Archi);
  22.  
  23. //se crea un nuevo producto a partir de los datos leidos
  24. this->Nuevo(PR.Nombre, PR.Precio, PR.Tipo, PR.SubTipo);
  25.  
  26. //esta parte no se si esta bien, segun lo que entiendo en algun
  27. //momento tendria que llegar a cero y no pasarse
  28. Tamanio-= sizeof Producto_Auxiliar;
  29. }
  30. }else return 0;
  31.  
  32. return 1;
  33. }

el struct Producto_Auxiliar tiene la siguiente forma:

Código C++:
Ver original
  1. struct Producto_Auxiliar{UnicodeString Nombre, Tipo, SubTipo;
  2. float Precio;};


Segun los ejemplos que encontre a traves de internet esto tendria que funcionar, pero no....

Cuando ejecuto Guarda_Lista se crea el archivo "datos.dat" con un tamaño de 16 bytes.... al tratar de leerlo con Cargar_Lista, no lo hace, a veces se lee la variable Precio pero las demas quedan vacias, es decir, Nombre, Tipo y SubTipo son cadenas vacias, y esto me ocasiona problemas cuando trato de crear un nuevo Producto en la linea 24 de Cargar_Lista

Etiquetas: binario, string, struct
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 06:00.