Ver Mensaje Individual
  #6 (permalink)  
Antiguo 17/06/2009, 14:46
Annoying
 
Fecha de Ingreso: diciembre-2008
Ubicación: Vigo, Spain
Mensajes: 141
Antigüedad: 16 años, 2 meses
Puntos: 12
Respuesta: Problemas con apuntadores y archivos

Ok, el problema de cuando reemplaza es porque te explico:
Al abrir el archivo en modo rb+ el puntero del fichero se situa al principio del fichero, es decir, antes del primer registro, si revisas, no mueves ese puntero antes de usar el fwrite, y por eso te lo reemplaza, en cambio si abrieras el archivo en ab+ el puntero se situa al final del fichero si es que éste existe.

F = fopen("D:/trabajo/Agenda.dat","rb+");
if(F==NULL)
{
printf(" No se puede abrir el archivo\n");
system("pause");
exit(1);
}
fseek(F,0L,2); //te mueve el puntero al final del fichero
fwrite(*p,sizeof(struct persona),1,F);
printf("\n\n\tDOCENTE ARCHIVADO!!!");


----------------------------
Por otro lado, el problema de la visualización, está en que, al abrir el fichero, y acontinuación haces un while(!feof(F)), empiezas dentro del bucle, imprimiendo obviamente basura, ya que no hicistes ningun fread antes de la primera impresión, entonces quedaría así:

F = fopen("D:/trabajo/Agenda.dat","rb");
if(F==NULL)
{
printf("\n\tNo se puede abrir el archivo\n");
exit(1);
}
fread(p,sizeof(struct persona),1,F);
while(!feof(F))
{
printf("%s",p->nom);
printf("\t\t%s",p->ap);
cout<<"\n\n";
fread(p,sizeof(struct persona),1,F);

}
fclose(F);
system("pause");

Otra cosa que no recuerdo ahora, es que al usar puntero a puntero, no se si sigue necesitando o no, usar el & en fread/fwrite, pero puedes probar:

fread(p,sizeof(struct persona),1,F);
O
fread(&p,sizeof(struct persona),1,F);

Espero eso te solucione algún que otro problema.