FERROR |
Erreur fichier |
---|---|
Langage C++ | cstdio (stdio.h) |
Syntaxe
int ferror(FILE *ptrfichier); |
Paramètres
Nom | Description |
---|---|
ptrfichier | Ce paramètre permet d'indiquer l'identificateur de fichier |
Description
Cette fonction retourne le code d'erreur d'entrée/sortie du fichier.
Remarques
- La fonction ferror() recherche une erreur de fichier sur le flux de données. Une valeur de retour de zéro indique qu'aucune erreur ne s'est produite, tandis qu'une valeur différente de zéro signifie une erreur.
- Les drapeaux d'erreur associés au flux de données resteront définis jusqu'à ce que le fichier soit fermé ou que rewind() ou clearerr() soit appelé.
- Pour déterminer la nature exacte de l'erreur, utilisez la fonction perror().
- Si vous souhaitez signaler un erreur au niveau de l'analyse du préprocesseur du compilateur, vous devez plutôt utiliser la directive de compilation «#error».
- Définition et utilité : La fonction ferror en C++ est utilisée pour tester si une erreur est survenue lors des opérations sur un fichier. Elle permet de vérifier si une erreur d'entrée/sortie s'est produite sur un flux de fichier ouvert avec fopen, freopen, ou d'autres fonctions de la bibliothèque standard C. Elle est définie dans <cstdio>.
- Retour de ferror : La fonction retourne une valeur différente de zéro (généralement 1) si une erreur a été détectée sur le flux spécifié. Si aucune erreur n'a eu lieu, elle renvoie 0. Ce retour indique la présence d'une erreur sur le flux, mais ne fournit pas de détails sur la nature spécifique de l'erreur.
- Utilisation pour diagnostiquer des erreurs : ferror est souvent utilisée après une opération de lecture ou d'écriture pour vérifier si un problème est survenu. Par exemple, après une tentative de lecture avec fgetc ou fscanf, un appel à ferror peut être utilisé pour diagnostiquer une erreur d'entrée/sortie :
- Interaction avec feof : Il est crucial de ne pas confondre ferror avec feof. Tandis que feof indique la fin du fichier, ferror signale une erreur d'entrée/sortie. Par exemple, si une tentative de lecture échoue, feof pourrait être vraie si la fin du fichier a été atteinte, mais ferror permet de déterminer si l'échec était dû à un problème d'entrée/sortie (comme une panne de disque ou un flux corrompu).
- Cas d'erreur courants : Les erreurs courantes détectées par ferror incluent des problèmes tels que des erreurs d'écriture (par exemple, si le disque est plein), des erreurs de lecture (comme une erreur de connexion pour un fichier à distance), ou des problèmes liés aux permissions de fichier. Si une erreur survient, l'application peut utiliser cette information pour réagir (par exemple, réessayer l'opération ou signaler un message d'erreur à l'utilisateur).
- Réinitialisation de l'état d'erreur : Une fois qu'une erreur a été détectée sur un fichier (indiquée par un retour non nul de ferror), il est possible de réinitialiser l'état d'erreur en appelant clearerr. Cette fonction remet à zéro l'état d'erreur et l'indicateur de fin de fichier pour le flux spécifié, permettant ainsi de tenter de rouvrir ou de réutiliser le fichier dans de nouvelles opérations.
- Portabilité et disponibilité : ferror est bien supportée dans les implémentations standard de C++ utilisant la bibliothèque C, car elle fait partie de la norme C standard. Cependant, dans les applications C++ modernes utilisant fstream ou d'autres mécanismes de gestion des fichiers de la bibliothèque standard C++, il existe des alternatives comme la méthode fail() pour gérer les erreurs. Dans ce cas, ferror pourrait ne pas être nécessaire si le programme utilise les flux C++ de manière plus abstraite.
Cela permet de distinguer une fin de fichier atteinte (étant vérifiée par feof) d'une erreur d'entrée/sortie.
Exemple
Cet exemple effectue une écriture dans un fichier ouvert en écriture :

- #include <iostream>
- #include <cstdio>
- #include <cstdlib>
- #include <cstring>
-
- int main()
- {
- FILE * Handle = fopen("monfichier.txt", "r");
- if(Handle != NULL) {
- fputs("Ecrire dans une lecture",Handle);
- int err = ferror(Handle);
- std::cout << "Erreur " << err << " = " << strerror(err) << std::endl;
- fclose(Handle);
- }
- return 0;
- }
on obtiendra le résultat semblable suivant :
Erreur 32 = Broken pipeVoir également
Langage de programmation - C++ - Référence procédures et fonctions - clearerr
Langage de programmation - C++ - Référence procédures et fonctions - feof
Langage de programmation - C++ - Référence procédures et fonctions - perror
Langage de programmation - C - Référence procédures et fonctions - ferror
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 97.