Partage via


freopen_s, _wfreopen_s

Ferme le fichier actuellement associé oldStream au fichier et le réaffecte stream au fichier spécifié par fileName.

Ces versions ont des améliorations de freopen _wfreopensécurité, comme décrit dans les fonctionnalités de sécurité du CRT.

Syntaxe

errno_t freopen_s(
   FILE ** stream,
   const char * fileName,
   const char * mode,
   FILE* oldStream
);

errno_t _wfreopen_s(
   FILE ** stream,
   const wchar_t * fileName,
   const wchar_t * mode,
   FILE * oldStream
);

Paramètres

stream
Paramètre out qui pointe vers le flux rouvert lorsque la fonction retourne.

fileName
Chemin d’accès du fichier à rouvrir.

mode
Mode du flux rouvert.

oldStream
Flux à rouvrir. Il est vidé et tous les fichiers associés à celui-ci sont fermés.

Valeur retournée

Zéro sur le succès ; sinon, un code d’erreur. Si une erreur se produit, le fichier d’origine est fermé et NULL est écrit à stream moins d’être stream également NULL

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

Notes

La freopen_s fonction est généralement utilisée pour attacher les flux pré-ouverts associés stdinà , stdout et stderr à un autre fichier.

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

Si l’un des éléments , , pathou modestream sont NULLou s’il path s’agit d’une chaîne vide, ces fonctions appellent le gestionnaire de pFileparamè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 EINVAL.

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 routines de texte générique

Routine TCHAR.H _UNICODE et _MBCS non définis _MBCS défini _UNICODE défini
_tfreopen_s freopen_s freopen_s _wfreopen_s

freopen_s 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_s é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.

Modificateur mode 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 lorsque 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_s <stdio.h>
_wfreopen_s <stdio.h> ou <wchar.h>

La console n’est pas prise en charge dans les applications de la plateforme Windows universelle (UWP). Les handles de flux standard associés à la console (stdin, stdout et stderr) doivent être redirigés pour que les fonctions de runtime C puissent les utiliser dans les applications UWP.

Pour plus d’informations sur la compatibilité, consultez Compatibility.

Exemple

// crt_freopen_s.c
// 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 )
{
   errno_t err;
   // Reassign "stderr" to "freopen.out":
   err = freopen_s( &stream, "freopen.out", "w", stderr );

   if( err != 0 )
      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

Stream I/O
freopen, _wfreopen
fclose, _fcloseall
_fdopen, _wfdopen
_fileno
fopen, _wfopen
_open, _wopen
_setmode