[ Foro de C ]

Problema fread en C

29-Jan-2020 21:17
Invitado (david)
3 Respuestas

Hola, estoy tratando de leer un fichero binario el cual contiene elementos de una estructura, el problema esta en el fread, se me queda en "Error de lectura" y no me incrementa el contador. Muchas gracias


int Llegir_FitxerBinari (EXPERIMENT exp[],int *comptador) {
	FILE *fich1;
	int i=0, con,err1;
	char nom1[20];
	con=*comptador;
	printf("Introduir nom fitxer: \n");
	scanf("%s",nom1);
	strcat (nom1,".bin");
	fich1 = fopen(nom1, "rb");
	if (fich1==NULL) {
		printf("Error al obrir fitxer.\n");
	} else {
		printf ("Fichero de escritura abierto correctamente\n");
		do {
			if(con<ELEM) {//caben experimentos.
				err1=fread(&exp[con], sizeof(EXPERIMENT),1,fich1);
				if(err1!=1) printf("Error de lectura.\n");
				if(err1==1) {
					con++;
				}
			}
		} while(!feof(fich1)&&err1==1);
	}
	fclose (fich1);
	fflush(fich1);
	*comptador=con;
	return con;
}


 


02-Feb-2020 10:50
Nacho Cabanes (+62)

La lógica parece buena. ¿Seguro que el fichero contiene suficientes datos como para llenar un elemento del struct?  Incluye la estructura de cómo es el struct, por si acaso.

Apenas veo algún detalle que suena raro, como el hecho de que pases un contador, pero siempre empieces a leer desde el principio del fichero, porque no hay ningún "seek" para saltar los primeros datos. Pero eso no debería ser el motivo del problema, o al menos no con el dato 0.


03-Feb-2020 14:18
Jorge d r (+1)

Creo que se tiene que inicializar la variable ’con’ al menos con un uno, el 0 no te serviría tal y como lo tienes porque luego haces un *=

int i=0, con,err1;
char nom1[20];
con=*comptador


03-Feb-2020 14:19
Jorge d r (+1)

Ahhh no no que estás accediendo al puntero :-) perdona






(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)