Como mencionas, el fseek que tienes en tu código te coloca el puntero al principio del archivo.
Para la lectura de cada registro y cargarlo en la estructura anexo un pequeño ejemplo:
Código:
fseek(File,0L,SEEK_SET);
while(fread(Dato,sizeof(Dato),1,File)){
stReg = (Reg *) malloc(sizeof(Reg));//Reserva memoria para la estructura
vdInitStReg(stReg); //En esta función limpio la estructura
fseek(File,sizeof(char),SEEK_CUR);
fread(&stReg->Estatus,sizeof(stReg->Estatus),1,File);
fseek(File,sizeof(stReg->Estatus)-1,SEEK_CUR);
fread(stReg->Fecha ,sizeof(stReg->Fecha)-1,1,File);
fseek(File,sizeof(char) ,SEEK_CUR);
fread(stReg->Hora, sizeof(stReg->Hora)-1,1,File);
}
Donde Dato es un char[] con la longitud del registro +1 para al final dejar un '\0'. File es el puntador a mi archivo. stReg es un apuntador a una estructura de tipo Reg. La estructura Reg esta compuesta por los elementos
char Estatus
char Fecha[]
char Hora[]
Quiza me diran que porque no cargo directamente del archivo a la estructura. El problema que encontre es que al tener Strings (char[]) si se carga directo del archivo, no deja el ultimo elemento del array en '\0' y las variables se desbordan
Espero te sirva.