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 originalbool Lista_Producto::Guardar_Lista(){
if (FILE
*Archi
= fopen("datos.dat", "wb")){
Producto *Aux= this->__Primero;
Producto_Auxiliar PR;
while (Aux){
//se le asigna al struct PR los datos que se van a almacenar
PR.Nombre= Aux->__Nombre;
PR.Tipo= Aux->__Tipo;
PR.SubTipo= Aux->__SubTipo;
PR.Precio= Aux->__Precio;
//se guarda en el archivo los datos
fwrite(&PR
, sizeof PR
, 1, Archi
);
Aux= Aux->__Siguiente;
}
}else return 0;
return 1;
};
y para cargar:
Código C++:
Ver originalbool Lista_Producto::Cargar_Lista(){
unsigned long int Tamanio;
if (FILE
*Archi
= fopen("datos.dat", "rb")) {
//se obtiene el tamaño del archivo
fseek(Archi
, 0, SEEK_END
);
//se retorna el puntero al principio del archivo
Producto_Auxiliar PR;
while (Tamanio != 0){
//se lee del archivo un bloque y se guarda en PR
fread(&PR
, sizeof PR
, 1, Archi
);
//se crea un nuevo producto a partir de los datos leidos
this->Nuevo(PR.Nombre, PR.Precio, PR.Tipo, PR.SubTipo);
//esta parte no se si esta bien, segun lo que entiendo en algun
//momento tendria que llegar a cero y no pasarse
Tamanio-= sizeof Producto_Auxiliar;
}
}else return 0;
return 1;
}
el struct Producto_Auxiliar tiene la siguiente forma:
Código C++:
Ver originalstruct Producto_Auxiliar{UnicodeString Nombre, Tipo, SubTipo;
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