Pregunta

Tengo un archivo. He leído el tamaño del archivo. Entonces bucle de lectura de dos bytes a la vez hasta que llegue al final del archivo. Después de cada operación de lectura I Valor mínimo de la posición actual por 2, sin embargo, la posición no consigue incrementa después llego a la mitad del tamaño del archivo, la operación fread lee 0 bytes.

el programa lee el tamaño del archivo. Realizo fread (2 bytes cada vez) hasta que la posición actual es igual al tamaño del archivo. Se lee 22915 despedidas para el tamaño del archivo Se incrementa la posición por 2 después de cada lectura, sin embargo, cuando la posición actual llega a 11.459 que es la mitad del tamaño del fichero, leerá cero bytes yendo así en un bucle infinito.

FILE *file;
char *file_name;
int readCount = 0;
int position = 0;
int fileSize;
unsigned short mem_accesses;

file_name = "sample.txt";

/** open the file */
file = fopen(file_name, "rb");
fseek(file, 0, SEEK_END);
fileSize = ftell(file);
rewind(file);


while(position<fileSize){
   mem_accesses = getNumberAccesses();
   printf("position: %d filesize: %d\n",position, fileSize);

}

unsigned short getNumberAccesses(){
/** calculate number of accesses for process */
unsigned short val;

readCount = fread(&val, sizeof(val), 2, file);

position += readCount;
printf("read count: %d\n", readCount);

return val;
}
¿Fue útil?

Solución

readCount = fread(&val, sizeof(val), 2, file);  

Esta declaración lee dos artículos de dos bytes cada uno. Y devuelve el valor 2 , por el número de elementos de lectura. Los parámetros segundo y tercer multiplican entre sí dicen fread cuántos bytes a leer.

Otros consejos

fread devuelven el número de elementos de leer, no el número de bytes.

(Por cierto, en su código, por error, le dan un contador de elementos de 2, que provoca un desbordamiento de memoria).

Debe comprobar el valor de retorno de fread por lo que no se ejecutará en bucles infinitos en el caso de errores.

en lugar de consultar para el tamaño del archivo, yo simplemente llamar fread (u otras funciones de entrada) en un bucle hasta que el final del archivo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top