CLEARERR |
Efface erreur |
---|---|
Langage C++ | cstdio (stdio.h) |
Syntaxe
void clearerr(FILE *ptrfic); |
Paramètres
Nom | Description |
---|---|
ptrfic | Ce paramètre permet d'indiquer l'identificateur de fichier |
Description
Cette fonction permet d'éliminer les indices d'erreurs et de fin de fichier.
Remarques
- La fonction clearerr() réinitialise (c'est-à-dire fixe à zéro) le drapeau d'erreur associé au flux de données pointé par le flux de données. Le drapeau de fin de fichier est également réinitialisé.
- Les drapeaux d'erreur pour chaque flux de données sont initialement mis à zéro par un appel réussi à fopen().
- Une fois qu'une erreur s'est produite, les drapeaux restent définis jusqu'à ce qu'un appel explicite soit à la fonction clearerr() soit à la fonction rewind() soit effectué.
- Les erreurs de fichier peuvent se produire pour une grande variété de raisons, dont beaucoup dépendent du système. La nature exacte de l'erreur peut être déterminée en appelant perror(), affichant quelle erreur s'est produite.
- Définition et utilité : La fonction clearerr est utilisée pour réinitialiser les erreurs et la fin de fichier (EOF) associées à un flux. Elle permet de nettoyer les indicateurs d'erreur ou de fin de fichier sur un flux donné, afin de pouvoir continuer les opérations sur le flux. Cela est particulièrement utile lorsqu'on souhaite réessayer une opération après une erreur ou la fin de fichier sans fermer et rouvrir le flux.
- Réinitialisation des états d'erreur : Lorsqu'une opération de lecture ou d'écriture échoue sur un flux, les indicateurs d'erreur sont activés. Par exemple, après une lecture échouée, l'indicateur d'erreur sera défini. L'appel à clearerr permet de réinitialiser cet état d'erreur, ce qui permet de tenter à nouveau des opérations sur le flux sans que l'erreur précédente ne soit un obstacle. Cela peut être utile après un échec temporaire dans l'accès aux données, comme un problème de lecture dû à un blocage ou une erreur réseau.
- Réinitialisation de l'indicateur de fin de Fichier (EOF) : Un autre rôle important de clearerr est de réinitialiser l'indicateur de fin de fichier (EOF). Si une opération de lecture atteint la fin du fichier, l'indicateur EOF est activé, ce qui empêche les lectures supplémentaires. Après avoir réinitialisé cet indicateur avec clearerr, il devient possible de tenter de lire à nouveau à partir du flux, même si la fin de fichier a été atteinte précédemment. Par exemple, si le fichier a été modifié ou si l'EOF était atteint par erreur, l'appel à clearerr permet de relancer la lecture.
- Utilisation courante : La fonction clearerr est fréquemment utilisée dans des boucles de lecture et d'écriture sur des fichiers pour gérer les erreurs et les EOF. Par exemple, après avoir détecté une erreur de lecture sur un fichier, vous pouvez appeler clearerr pour réinitialiser l'état du flux et essayer à nouveau la lecture. Cela permet d'éviter que des erreurs précédentes bloquent le programme.
- Comportement avec les flux standard : Bien que clearerr soit principalement utilisée avec des flux de fichiers (représentés par FILE*), elle peut être utilisée sur n'importe quel flux de type FILE* (comme stdin, stdout, ou stderr). Cela permet de réinitialiser les erreurs ou l'indicateur EOF associés à ces flux. Cependant, l'utilisation la plus courante se fait généralement sur des flux de fichiers ouverts en mode lecture/écriture.
- Limites de clearerr : Il est important de noter que clearerr ne corrige pas les erreurs sous-jacentes ayant causé l'activation de l'indicateur d'erreur ou d'EOF. Par exemple, si une erreur de lecture s'est produite à cause d'une corruption de fichier ou d'une autre condition irrémédiable, clearerr réinitialisera simplement l'état du flux, mais l'erreur persistera si vous tentez de relire le flux. Dans ces cas, il peut être nécessaire d'examiner la source de l'erreur avant de tenter à nouveau une opération.
Exemples
Voici quelques exemples typiques de l'utilisation de cette fonction :

Dans cette exemple, après une erreur ou la fin de fichier, clearerr permet de réinitialiser l'état du flux et de réessayer la lecture :
- FILE* file = fopen("example.txt", "r");
- if (file == nullptr) {
- std::cerr << "Erreur d'ouverture du fichier." << std::endl;
- } else {
- char buffer[100];
- while (fgets(buffer, sizeof(buffer), file) != nullptr) {
- // Traitement des données...
- }
- // Si une erreur se produit, on peut réinitialiser l'état du flux.
- clearerr(file);
- // Nouvelle tentative de lecture...
- }
- fclose(file);
Voir également
Langage de programmation - C++ - Référence de procédures et fonctions - feof
Langage de programmation - C++ - Référence de procédures et fonctions - ferror
Langage de programmation - C++ - Référence de procédures et fonctions - perror
Langage de programmation - C - Référence de procédures et fonctions - clearerr
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 52.