FREOPEN |
Libère et ouvre |
---|---|
Langage C | stdio.h |
Syntaxe
FILE *freopen(const char *nomfichier,const char *mode,FILE *ptrfichier); |
Paramètres
Nom | Description | |
---|---|---|
nomfichier | Ce paramètre permet d'indiquer le nom du fichier | |
mode | Ce paramètre permet d'indiquer le mode d'ouverture combiné du fichier | |
Valeur | Description | |
a | Cette valeur indique une création en ajoutant à la fin du fichier | |
b | Cette valeur indique une ouverture en mode binaire | |
a+ | Cette valeur indique une création en ajoutant à la fin du fichier existant | |
r | Cette valeur indique un mode d'accès en lecture | |
r+ | Cette valeur indique un mode d'accès en lecture d'un fichier existant | |
t | Cette valeur indique une ouverture en mode texte | |
w | Cette valeur indique un mode d'accès en écriture | |
w+ | Cette valeur indique un mode d'accès en écriture et écrase le fichier existant | |
ptrfichier | Ce paramètre permet d'indiquer l'identificateur de fichier |
Description
Cette fonction ferme le fichier et réouvre un fichier en lui affectant un pointeur.
Algorithme
MODULE FREOPEN(filename, mode, stream) SI stream est NULL ALORS RETOURNE Erreur "Le flux spécifié est invalide" FIN SI * Fermer le flux actuel stream (si déjà ouvert) Appeler fclose(stream) pour fermer proprement le flux existant Essayer d'ouvrir le fichier filename avec le mode spécifié : Ouvrir le fichier filename en utilisant le mode donné (par exemple "r", "w", "a",...) SI l'ouverture échoue ALORS * Erreur, impossible d'ouvrir le fichier RETOURNE NULL FIN SI SI l'ouverture réussit ALORS Associer le fichier ouvert à stream RETOURNE le flux stream (maintenant associé au fichier) FIN SI |
Remarques
- Redirection de flux avec freopen : La fonction freopen est utilisée pour rediriger les flux de fichier standard (comme stdin, stdout, et stderr) vers des fichiers ou pour changer l'association d'un flux déjà ouvert. Cela est particulièrement utile pour les applications devant diriger leur sortie ou leur entrée vers des fichiers spécifiques sans modifier le code principal de lecture ou d'écriture.
- Syntaxe et paramètres : freopen prend trois paramètres : le nom du fichier, le mode d'ouverture (comme "r", "w", ou "a"), et un pointeur vers le flux de fichier (FILE*). Elle retourne un pointeur vers le fichier redirigé en cas de succès, ou NULL si elle échoue, permettant ainsi une vérification d'erreur après son appel.
- Changement du mode de fichier en direct : Avec freopen, il est possible de changer dynamiquement le mode d'un flux déjà ouvert, par exemple pour passer de lecture à écriture, sans avoir à fermer puis rouvrir le fichier. Cela peut simplifier le code dans les applications où les opérations de lecture et d'écriture alternent sur le même flux de données.
- Redirection des flux standard : freopen est souvent utilisée pour rediriger stdout et stderr vers des fichiers de journaux de bord (log). Par exemple, en redirigeant stderr vers un fichier, il est possible de capturer les erreurs générées pendant l'exécution, facilitant ainsi le débogage sans affecter la sortie standard.
- Utilisation dans les tests automatisés : freopen est très utile pour les tests, où il est souvent nécessaire de capturer la sortie standard ou de rediriger l'entrée à partir de fichiers de test. Cela permet aux tests automatisés de vérifier les sorties d'un programme sans intervention manuelle, en redirigeant les flux pour les comparer avec des valeurs attendues.
- Gestion des erreurs et des fermetures : Si freopen échoue, le flux associé est laissé inchangé, ce qui signifie que le programme peut continuer à utiliser le flux d'origine sans risque de plantage. Toutefois, si le fichier est redirigé avec succès, il est nécessaire de le fermer explicitement avec fclose pour libérer les ressources, sinon cela peut entraîner des fuites de ressources.
- Incompatibilités potentielles : Bien que freopen soit une fonction standard du C, certains systèmes peuvent ne pas gérer correctement la redirection de flux de données sur des fichiers déjà ouverts. Dans des environnements complexes, des erreurs peuvent survenir, notamment avec des fichiers binaires ou des périphériques d'entrée/sortie spéciaux, rendant freopen moins fiable dans certains cas.
Exemple
Voici un exemple montrant une utilisation plus classique de cette fonction :
Essayer maintenant !
- #include <stdio.h>
- #include <stdlib.h>
-
- int main()
- {
- FILE * Handle = fopen("monfichier.txt", "w+");
- if(Handle != NULL) {
- fprintf(Handle,"Gladir.com");
- printf("Le fichier a été écrit avec succès\n");
- FILE * Handle2 = freopen("monfichier.txt", "w+", Handle);
- if(Handle != NULL) {
- fprintf(Handle2,"Gladir.ca");
- printf("Le fichier a été réouvert avec succès\n");
- /* Traitement ... */
- fclose(Handle);
- }
- }
- return 0;
- }
on obtiendra le résultat suivant dans le fichier «monfichier.txt» :
Gladir.caVoir également
Langage de programmation - C - Référence de procédures et fonctions - fclose
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 - freopen
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 112.
Dernière mise à jour : Mardi, le 28 juillet 2015