freopen, _wfreopen

Réaffecte un pointeur de fichier. Des versions plus sécurisées des fonctions sont disponibles ; voir freopen_s, _wfreopen_s.

Syntaxe

FILE *freopen(
   const char *path,
   const char *mode,
   FILE *stream
);
FILE *_wfreopen(
   const wchar_t *path,
   const wchar_t *mode,
   FILE *stream
);

Paramètres

path
Chemin d’accès du nouveau fichier.

mode
Type d'accès autorisé.

stream
Pointeur vers la structure FILE .

Valeur retournée

Chacune de ces fonctions retourne un pointeur vers le fichier qui vient d'être ouvert. Si une erreur se produit, le fichier d’origine est fermé et la fonction retourne une NULL valeur de pointeur. Si path, ou modestream est un pointeur Null, ou s’il s’agit filename d’une chaîne vide, ces fonctions appellent le gestionnaire de paramètres non valide, comme décrit dans la validation de paramètre. Si l'exécution est autorisée à se poursuivre, ces fonctions attribuent à errno la valeur EINVAL et retournent NULL.

Pour plus d’informations sur les codes d’erreur, consultez , , _sys_errlist_doserrnoet _sys_nerr.errno

Notes

Des versions plus sécurisées de ces fonctions existent, consultez freopen_s, _wfreopen_s.

La freopen fonction ferme le fichier actuellement associé stream au fichier et le réaffecte stream au fichier spécifié par path. _wfreopen est une version à caractères larges de _freopen ; les arguments path et mode de _wfreopen sont des chaînes à caractères larges. Sinon,_wfreopen et _freopen se comportent de la même façon.

Par défaut, l’état global de cette fonction est limité à l’application. Pour modifier ce comportement, consultez État global dans le CRT.

Mappages de routine de texte générique

TCHAR.H Routine _UNICODE et _MBCS non défini _MBCS Défini _UNICODE Défini
_tfreopen freopen freopen _wfreopen

freopen est généralement utilisé pour rediriger les fichiers pré-ouverts stdin, stdout et stderr vers les fichiers spécifiés par l'utilisateur. Le nouveau fichier associé stream est ouvert avec mode, qui est une chaîne de caractères spécifiant le type d’accès demandé pour le fichier, comme suit :

mode Access
"r" Ouvre pour l'accès en lecture. Si le fichier n’existe pas ou est introuvable, l’appel freopen échoue.
"w" Ouvre un fichier vide pour l'accès en écriture. Si le fichier spécifié existe, son contenu est détruit.
"a" S'ouvre pour écriture à la fin du fichier (ajout) sans supprimer le marqueur de fin de fichier (EOF) avant que de nouvelles données soient écrites dans le fichier. Crée le fichier s'il n'existe pas.
"r+" Ouvre pour l'accès en lecture et en écriture. Le fichier doit exister.
"w+" Ouvre un fichier vide pour l'accès en lecture et en écriture. Si le fichier existe, son contenu est détruit.
"a+" S'ouvre pour lecture et ajout. L'opération d'ajout inclut la suppression du marqueur EOF avant que de nouvelles données soient écrites dans le fichier. Le marqueur EOF n’est pas restauré une fois l’écriture terminée. Crée le fichier s'il n'existe pas.

Utilisez les types "w" et "w+" avec précaution, car ils peuvent détruire les fichiers existants. À compter de C11, vous pouvez ajouter "x" ou "w+""w" provoquer l’échec de la fonction si le fichier existe, au lieu de le remplacer.

Quand un fichier est ouvert avec le type d'accès "a" ou "a+", toutes les opérations d'écriture se produisent à la fin du fichier. Bien que le pointeur de fichier puisse être repositionné à l’aide fseek ou rewind, le pointeur de fichier est toujours déplacé vers la fin du fichier avant l’exécution d’une opération d’écriture. Par conséquent, les données existantes ne peuvent pas être remplacées.

Le "a" mode ne supprime pas le marqueur EOF avant de l’ajouter au fichier. Après l'ajout, la commande MS-DOS TYPE affiche uniquement les données jusqu'au marqueur EOF d'origine, et non les données ajoutées au fichier. Le mode "a+" supprime le marqueur EOF avant l'ajout des données au fichier. Après l'ajout, la commande MS-DOS TYPE affiche toutes les données du fichier. Le mode "a+" est obligatoire pour ajouter des données à un fichier de flux qui se termine par le marqueur EOF Ctrl+Z.

Lorsque le type d'accès "r+", "w+" ou "a+" est spécifié, la lecture et l'écriture sont autorisées (on dit que le fichier est ouvert pour « mise à jour »). Toutefois, lorsque vous basculez entre la lecture et l’écriture, il doit y avoir une opération ou fseekrewind une opération intermédiairefsetpos. La position actuelle peut être spécifiée pour l’opération ou fseek l’opérationfsetpos, si vous le souhaitez. Outre les valeurs ci-dessus, l'un des caractères suivants peut être inclus dans la chaîne mode pour spécifier le mode de traduction pour les nouvelles lignes.

mode Modificateur Mode de traduction
t Ouvrir en mode texte (traduit).
b Ouvrez en mode binaire (non traduit) ; les traductions impliquant des caractères de retour chariot et de saut de ligne sont supprimées.

En mode texte (traduit), les combinaisons de saut de ligne de retour chariot (CR-LF) sont traduites en caractères de flux de ligne unique (LF) lors de l’entrée ; Les caractères LF sont traduits en combinaisons CR-LF en sortie. De même, Ctrl+Z est interprété comme un caractère de fin de fichier en entrée. Dans les fichiers ouverts en lecture ou lecture et écriture avec "a+", la bibliothèque Runtime recherche un Ctrl+Z à la fin du fichier et le supprime, si possible. Elle est supprimée, car l’utilisation fseek et ftell le déplacement dans un fichier peuvent entraîner fseek un comportement incorrect près de la fin du fichier. N’utilisez pas l’option t si vous souhaitez une portabilité ANSI, car il s’agit d’une extension Microsoft.

Si t la b variable globale est définie ou non, modele mode de traduction par défaut est défini par la variable _fmodeglobale. Si t ou b a l'argument comme préfixe, la fonction échoue et retourne NULL.

Pour une discussion sur les modes texte et binaire, consultez E/S de fichier texte et binaire.

Spécifications

Fonction En-tête requis
freopen <stdio.h>
_wfreopen <stdio.h> ou <wchar.h>

La console n’est pas prise en charge dans les applications plateforme Windows universelle (UWP). Les handles de flux standard associés à la console, stdinet stdoutstderrdoivent être redirigés avant que les fonctions d’exécution C puissent les utiliser dans les applications UWP. Pour plus d’informations sur la compatibilité, consultez Compatibility.

Exemple

// crt_freopen.c
// compile with: /W3
// This program reassigns stderr to the file
// named FREOPEN.OUT and writes a line to that file.
#include <stdio.h>
#include <stdlib.h>

FILE *stream;

int main( void )
{
   // Reassign "stderr" to "freopen.out":
   stream = freopen( "freopen.out", "w", stderr ); // C4996
   // Note: freopen is deprecated; consider using freopen_s instead

   if( stream == NULL )
      fprintf( stdout, "error on freopen\n" );
   else
   {
      fprintf( stdout, "successfully reassigned\n" ); fflush( stdout );
      fprintf( stream, "This will go to the file 'freopen.out'\n" );
      fclose( stream );
   }
   system( "type freopen.out" );
}
successfully reassigned
This will go to the file 'freopen.out'

Voir aussi

E/S de flux
fclose, _fcloseall
_fdopen, _wfdopen
_fileno
fopen, _wfopen
_open, _wopen
_setmode