Partager via


freopen_s, _wfreopen_s

Réattribue un pointeur de fichier. Ces versions de freopen, _wfreopen ont des améliorations de sécurité, comme décrit dans Fonctionnalités de sécurité dans le CRT.

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

Paramètres

  • [out] pFile
    Pointeur vers le pointeur de fichier à fournir par l'appel.

  • [in] path
    Chemin d'accès du nouveau fichier.

  • [in] mode
    Type d'accès autorisé.

  • [in] stream
    Pointeur vers la structure FILE.

Valeur de retour

Chacune de ces fonctions retourne un code d'erreur. Si une erreur se produit, le fichier d'origine est fermé.

Notes

La fonction freopen_s ferme le fichier actuellement associé à stream et réaffecte stream au fichier spécifié par path. _wfreopen_s est une version à caractère élargi de _freopen_s; path et les arguments mode à _wfreopen_s sont des chaînes à caractères larges. _wfreopen_s et _freopen_s se comportent sinon de manière identique.

Si l'une de pFile, en path, en mode, ou stream sont NULL, ou si path est une chaîne vide, ces fonctions appellent le gestionnaire de paramètre non valide, comme décrit dans Validation de paramètre. Si l'exécution est autorisée à se poursuivre, ces fonctions définissent errno à la valeur EINVAL et retournent EINVAL.

Mappages de routines de texte générique

Routine TCHAR.H

_UNICODE & _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éalablement ouverts, stdin, stdoutet stderr aux fichiers spécifiés par l'utilisateur. Le nouveau fichier associé à stream s'ouvre avec mode*,* qui est une chaîne de caractères spécifiant le type d'accès demandé pour le fichier, comme suit :

  • "r"
    Ouvre pour l'accès en lecture. Si le fichier n'existe pas ou est introuvable, l'appel de 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 écrire à la fin du fichier (Ajouter) sans supprimer marqueur EOF avant d'entrer de nouvelles données dans le fichier ; crée d'abord 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 spécifié existe, son contenu est détruit.

  • "a+"
    S'ouvre pour lire et ajouter ; l'opération de ajout inclut la suppression de marqueur EOF avant la nouvelle donnée soit écrite dans le fichier et marqueur EOF est restauré une fois que l'écriture terminée ; crée d'abord le fichier s'il n'existe pas.

Utilisez les types "w" et "w+" avec précaution, car ils peuvent détruire des fichiers existants.

Lorsqu'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. Même si le pointeur de fichier peut être repositionné à l'aide de fseek ou de rewind, mais il est toujours remis à la fin du fichier avant qu'aucune opération d'écriture ne soit exécutée. Par conséquent, les données existantes ne peuvent être remplacées.

Le mode "a" ne supprime pas le marqueur EOF avant de faire des ajouts au fichier. Après que la phase d'ajouts se soit déroulée, la commande MS-DOS TYPE montre uniquement les données jusqu'au marqueur EOF d'origine et non toutes les données ajoutées au fichier. Le mode "a+" ne supprime pas le marqueur EOF avant de faire des ajouts au fichier. Après l'ajout, la commande MS-DOS TYPE affiche toutes les données du fichier. Le mode "a+" est obligatoire pour faire des ajouts à un fichier de flux qui est terminé à l'aide du marqueur EOF CTRL+Z.

Lorsque le "r+", "w+",, ou le type d'accès "a+" est spécifié, il autorise à la fois la lecture et l'écriture (le fichier est dit ouvert pour la valeur « mise à jour »). Toutefois, lorsque vous basculez entre la lecture et l'écriture, il doit y avoir une intervention de fsetpos, fseek, ou une opération de rembobinage. La position actuelle peut être spécifiée pour une opération fsetpos ou de fseek, le cas échéant. 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.

  • t
    Ouvrir dans le mode de texte (traduit) ; des combinaisons de saut de ligne-retour de chariot (CR-LF) sont traduites en caractères uniques de (LF) de saut de ligne à l'entrée ; Les caractères de saut de ligne sont traduits aux combinaisons de CR-LF sur la sortie. En outre, CTRL+Z est interprété comme caractère de fin de fichier sur l'entrée. Dans les fichiers ouverts en lecture ou en écriture et lecture avec "a+", la bibliothèque Runtime vérifie un CTRL+Z à la fin du fichier et le supprime, si possible. Cela est effectué grâce à l'utilisation de fseek et de ftell pour se déplacer à l'intérieur d'un fichier peut entraîner un comportement incorrect de fseek vers la fin du fichier. L'option t est une extension Microsoft qui ne doit pas être utilisée lorsqu'une portabilité ANSI est souhaitée.

  • b
    Basculez en mode (non traduit) binaire ; les traductions ci-dessus sont supprimées.

Si t ou b n'est pas donné dans mode, le mode de traduction par défaut est défini par la variable globale _fmode. Si t ou b a l'argument comme préfixe, la fonction échoue et retourne NULL.

Pour une discussion des modes de texte et binaire, consultez E/S de fichier du mode de texte et binaire.

Configuration requise

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 Windows Store . Les handles de flux standard associés à la console, stdin, stdout et stderr doivent être redirigés pour que les fonctions runtime C puissent les utiliser dans les applications Windows Store . Pour plus d'informations sur la compatibilité, consultez Compatibilité.

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" );
}
  

Équivalent .NET Framework

Voir aussi

Référence

E/S de flux

freopen, _wfreopen

fclose, _fcloseall

_fdopen, _wfdopen

_fileno

fopen, _wfopen

_open, _wopen

_setmode