FWRITE |
Écriture dans le fichier |
---|---|
Langage C++ | cstdio (stdio.h) |
Syntaxe
long fwrite(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 à écrire |
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 l'écriture d'un bloc de mémoire de taille n*taille octets dans un fichier.
Remarques
- La fonction fwrite() écrit le nombre de compteur d'objets, chaque objet étant de taille octets de longueur, dans le flux pointé par flux à partir du tableau de caractères pointé par tampon. L'indicateur de position du fichier est avancé par le nombre de caractères écrits.
- La fonction fwrite() renvoie le nombre d'éléments réellement écrits qui, si la fonction réussit, sera égal au nombre demandé. Si moins d'éléments sont écrits que ce qui est demandé, une erreur s'est produite. Pour les flux de données de texte, diverses conversions de caractères peuvent avoir lieu mais n'auront aucun effet sur la valeur de retour.
- Fonctionnalité et utilité : La fonction fwrite est utilisée pour écrire des données brutes depuis la mémoire vers un fichier. Elle est particulièrement utile pour manipuler des fichiers binaires, car elle permet d'écrire directement des structures ou des tableaux sans conversion de format. Elle est souvent employée en complément de fread pour la gestion de fichiers binaires.
- Valeur de retour et gestion des erreurs : fwrite retourne le nombre d'éléments effectivement écrits. Si ce nombre est inférieur à count, cela signifie qu'une erreur s'est produite ou que la fin du fichier a été atteinte. En cas d'échec, il est recommandé d'utiliser perror() ou de vérifier errno pour obtenir plus d'informations sur l'erreur.
- Différence avec fprintf et fputs : Contrairement à fprintf, écrivant du texte formaté, et fputs, écrivant des chaînes de caractères terminées par \0, fwrite écrit des blocs de données brutes. Cela signifie qu'il ne convertit pas les données et n'ajoute pas de caractères supplémentaires comme un \n en fin de ligne.
- Manipulation des structures et sérialisation : fwrite est particulièrement utile pour enregistrer des structures en mémoire directement dans un fichier binaire. Cependant, les structures contenant des pointeurs ne doivent pas être écrites telles quelles, car seuls les adresses mémoire seraient entreposées, rendant les données non exploitables après rechargement.
- Performances et accès au disque : fwrite est souvent plus performant que des écritures successives avec fputc ou fprintf, car elle minimise le nombre d'appels au système d'exploitation en écrivant de gros blocs de données en une seule fois. Pour améliorer encore la performance, l'utilisation d'un tampon (setvbuf) peut être envisagée.
- Problèmes de portabilité (Endianness et Alignement) : Lorsque fwrite est utilisée pour écrire des données binaires, il faut faire attention à l'endianness du système (big-endian ou little-endian). Un fichier binaire écrit sur une machine peut ne pas être lisible sur une autre à cause de différences dans la représentation des nombres multi-octets. De plus, certains compilateurs peuvent ajouter du padding dans les structures, ce qui peut affecter la portabilité.
Exemples
Voici un exemple typique de l'utilisation de cette fonction :

- #include <iostream>
- #include <cstdio>
- #include <cstdlib>
- #include <cstring>
-
- int main()
- {
- FILE * Handle = fopen("monfichier.txt", "wb");
- if(Handle != NULL) {
- char Temp[11];
- strcpy(Temp,"Gladir.com");
- std::cout << "Nombre de caractères écrit : " << fwrite(&Temp,1,strlen(Temp),Handle) << std::endl;
- fclose(Handle);
- }
- return 0;
- }
on obtiendra le résultat suivant dans le fichier «monfichier.txt» :
Gladir.comCet exemple ouvre un fichier en mode binaire (wb), écrit un tableau d'entiers et vérifie si l'écriture a réussi en comparant la valeur retournée par fwrite avec le nombre attendu d'éléments :
- #include <cstdio>
-
- int main() {
- FILE *file = fopen("data.bin", "wb");
- if (!file) return 1;
-
- int numbers[] = {10, 20, 30, 40, 50};
- size_t written = fwrite(numbers, sizeof(int), 5, file);
-
- if (written != 5) {
- perror("Erreur d'écriture");
- } else {
- printf("Écriture réussie de %zu éléments.\n", written);
- }
-
- fclose(file);
- return 0;
- }
Voir également
Langage de programmation - C++ - Référence de procédures et fonctions - fgetc
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 - fread
Langage de programmation - C++ - Référence de procédures et fonctions - fscanf
Langage de programmation - C++ - Référence de procédures et fonctions - getc
Langage de programmation - C - Référence de procédures et fonctions - fwrite
Références
Langage C, Edition Micro-Application, Gehard Willms, 2001, ISBN: 2-7429-2008-0, page 732.
Borland C++ for Windows 4.0, Library Reference, Edition Borland, 1993, Part # BCP1240WW21772, page 120.