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

Duda urgente con ficheros c++

Estas en el tema de Duda urgente con ficheros c++ en el foro de C/C++ en Foros del Web. No se porke despues de supuestamente salvar no me carga nada de el fichero anteriormente salvado... please alguna sugerencia OJO "dic" es un map de ...
  #1 (permalink)  
Antiguo 05/02/2008, 04:48
 
Fecha de Ingreso: febrero-2008
Mensajes: 9
Antigüedad: 16 años, 3 meses
Puntos: 0
Duda urgente con ficheros c++

No se porke despues de supuestamente salvar no me carga nada de el fichero anteriormente salvado... please alguna sugerencia

OJO "dic" es un map de la STL

map<AnsiString, Ansistring> dic

void Diccionario::Salvar(AnsiString n)
{
AnsiString *d;
int total=dic.size()*2;
d=new AnsiString[total];
map<AnsiString, AnsiString>::iterator iter=dic.begin();
int pos=0;

while(iter!=dic.end())
{
d[pos]=(*iter).first;
d[pos+1]=(*iter).second;
iter++;
pos+=2;
}

FILE*file=fopen(n.c_str(),"w+");
if(file!=NULL)
{
fwrite(&total,sizeof(int),1,file);
fwrite(d,sizeof(d),total,file);
}
fclose(file);
}
void Diccionario::Cargar(AnsiString n)
{
dic.clear();
AnsiString *d;
int total;
FILE*file=fopen(n.c_str(),"r+");
if(file!=NULL)
{
fread(&total,sizeof(int),1,file);
d=new AnsiString[total];
fread(d,sizeof(AnsiString),total,file);
for(int i=0; i<total; i+=2)
{
pair<AnsiString, AnsiString> p(d[i],d[i+1]);
dic.insert(p);
}
}
fclose(file);
}
  #2 (permalink)  
Antiguo 06/02/2008, 07:13
Avatar de _Lucifer_  
Fecha de Ingreso: junio-2006
Mensajes: 1.662
Antigüedad: 17 años, 11 meses
Puntos: 28
Re: Duda urgente con ficheros c++

¿Estás seguro de que esta guardando en el archivo? Yo creo que no lo está haciendo bien. Fíjate en esta línea:
Código:
...
fwrite(&total,sizeof(int),1,file);
fwrite(d,sizeof(d),total,file);
...
Si d es un puntero, sizeof(d) te va a retornar el tamaño del puntero en memoria, no del arreglo.

Saludos
__________________
Si crees que no tiene sentido, etonces probablemente lo tenga... :arriba:
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

SíEste tema le ha gustado a 1 personas (incluyéndote)




La zona horaria es GMT -6. Ahora son las 21:11.