Programmation en C ftell fseek fread, lire la taille d'un fichier
J'ai un fichier. J'ai lu que la taille de fichier. Ensuite je boucle la lecture de deux octets à la fois jusqu'à ce que j'arrive à la fin du fichier. Après chaque opération de lecture je incrémenter la position actuelle par 2, toutefois, la situation n'est pas incrémentée après j'arrive à la moitié de la taille du fichier, la fread opération lire 0 octets.
le programme lit la taille du fichier. J'ai effectuer fread (2 octets à chaque fois) jusqu'à ce que la position actuelle est égale à la taille du fichier.
Il lit 22915 exemptions pour la taille du fichier
Il incrémente la position par 2 après chaque lecture, cependant, quand de position actuelle arrive à 11459 qui est la moitié de la taille du fichier, vous pouvez lire des octets zéro permettre d'entrer dans une boucle infinie.
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;
}
- Je ne vois pas de question ici. Quelle est votre question?
Vous devez vous connecter pour publier un commentaire.
Cette déclaration indique les deux éléments de deux octets chacun. Et elle renvoie la valeur 2, pour le nombre d'articles à lire. Les deuxième et troisième paramètres multipliés dire
fread
combien d'octets à lire....sizeof(val),2...
à...1,sizeof(val)...
.fread retourner le nombre d'éléments de lecture, pas le nombre d'octets.
(D'ailleurs, dans votre code, par erreur, vous donner un élément compter 2, ce qui provoque un débordement de tampon).
Vous devriez vérifier fread de la valeur de retour de sorte que vous ne courez pas dans une boucle infinie dans le cas d'erreurs.
Au lieu de l'interrogation de la taille du fichier, je voudrais simplement appeler fread (ou d'autres fonctions d'entrée) dans une boucle jusqu'à la fin du fichier.