FREAD |
Lecture dans le fichier |
---|---|
Langage C++ | cstdio (stdio.h) |
Syntaxe
int fread(void *tampon,size_t taille,size_t n,FILE *ptrfichier) |
Paramètres
Nom | Description |
---|---|
ptrfichier | Ce paramètre permet d'indiquer l'identificateur de fichier |
tampon | Ce paramètre permet d'indiquer le bloc de données à lire |
n | Ce paramètre permet d'indiquer le nombre de bloc de données |
taille | Ce paramètre permet d'indiquer la taille du bloc de données |
Description
Cette fonction effectue la lecture d'un bloc de mémoire de taille n*taille octets dans un fichier.
Remarques
- La fonction fread() lit le nombre de compteur d'objets, chaque objet étant de taille octet de longueur, à partir du flux de données pointé par flux et les place dans le tableau pointé par tampon. L'indicateur de position du fichier est avancé par le nombre de caractères lus.
- La fonction fread() renvoie le nombre d'éléments réellement lus. Si moins d'éléments sont lus que ce qui est demandé dans l'appel, une erreur s'est produite ou la fin du fichier a été atteinte. Vous devez utiliser les fonctions feof() ou ferror() pour déterminer ce qui s'est passé.
- Si le flux de données est ouvert pour les opérations de texte, certaines conversions de caractères, telles que les séquences de retour de chariot et de saut de ligne transformées en retours à la ligne, peuvent se produire.
- Lecture efficace en binaire : La fonction fread est principalement utilisée pour lire des fichiers binaires en blocs de données. Contrairement à fgets ou fscanf, traitant les fichiers texte, fread ne modifie pas les données lues et permet une lecture plus efficace en mémoire. Cela la rend particulièrement adaptée aux fichiers contenant des structures complexes.
- Lecture partielle possible : Si le fichier ne contient pas suffisamment de données, fread peut lire moins d'éléments que demandé. Il est donc important de comparer la valeur de retour avec n pour détecter une lecture incomplète. Une lecture partielle peut aussi survenir en cas d'erreur d'entrée/sortie ou d'atteinte de la fin du fichier.
- Utilisation avec des structures : fread est couramment utilisée pour charger des structures complètes en mémoire :
- Gestion des erreurs : fread ne distingue pas les erreurs de lecture de la fin de fichier. Pour les différencier, il faut utiliser feof(file) pour tester la fin du fichier et ferror(file) pour vérifier s'il y a eu une erreur d'entrée/sortie. Un bon code doit toujours inclure ces contrôles après un appel à fread.
- Compatibilité avec les systèmes à endianness différente : Les fichiers binaires entreposent les données selon l'endianness du système les ayant écrits. Lorsqu'un fichier est lu sur une architecture différente (big-endian vs little-endian), les données multi-octets comme les entiers risquent d'être mal interprétées. Dans ce cas, il faut convertir l'endianness après la lecture avec des fonctions comme htonl() et ntohl().
- Lecture en mémoire tampon et performances : fread fonctionne en interne avec un tampon pour optimiser les accès disques. Cependant, si vous manipulez de très gros fichiers, il peut être plus efficace d'utiliser des techniques comme la mémoire cartographiée (mmap) sous Linux ou ReadFile sous Windows, pouvant offrir de meilleures performances en contournant les tampons standards de la libc.
- Lecture séquentielle vs accès aléatoire : fread lit les données séquentiellement, mais combinée à fseek, elle permet d'accéder à des
parties spécifiques du fichier. Cela est utile pour des formats de fichiers indexés ou structurés :
Cela permet un accès aléatoire efficace, par exemple pour naviguer dans un fichier contenant une base de données binaire.
Cela permet de manipuler directement des objets en mémoire sans conversion de format, contrairement à une lecture ligne par ligne avec fgets.
Exemple
Prenons pour acquis que le fichier «readtext.txt» est le contenu :
gladir.comVoici un exemple montrant une utilisation plus classique de cette fonction :

on obtiendra le résultat suivant :
1:gla2:dir
3:.co
Voir également
Langage de programmation - C++ - Référence de procédures et fonctions - fopen
Langage de programmation - C++ - Référence de procédures et fonctions - fwrite
Langage de programmation - C++ - Référence de procédures et fonctions - printf
Langage de programmation - C - Référence de procédures et fonctions - fread
Références
Langage C, Edition Micro-Application, Gehard Willms, 2001, ISBN: 2-7429-2008-0, page 731.
Borland C++ for Windows 4.0, Library Reference, Edition Borland, 1993, Part # BCP1240WW21772, page 111.