freopen_s, _wfreopen_s

 

Pour obtenir la dernière documentation sur Visual Studio 2017, consultez Documentation Visual Studio 2017.

Réaffecte 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é de la bibliothèque 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 devant être fourni 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 .

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

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

Si un des pFile, path, 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 attribuent à errno la valeur EINVAL et retournent EINVAL.

Mappages de routines de texte générique

Routine TCHAR.H_UNICODE et _MBCS non définis_MBCS défini_UNICODE défini
_tfreopen_sfreopen_sfreopen_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 :

"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"
Ouvre pour un accès en écriture à la fin du fichier (ajout) sans supprimer le marqueur de fin de fichier (EOF) avant l'écriture 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+"
Ouvre pour l'accès en lecture et l'ajout ; l'opération d'ajout inclut la suppression du marqueur EOF préalablement à l'écriture de nouvelles données dans le fichier et à la restauration du marqueur EOF à l'issue de l'écriture ; 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 les fichiers existants.

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. Même si le pointeur de fichier peut être repositionné à l'aide de fseek ou rewind, il est toujours redéplacé à la fin du fichier avant toute opération d'écriture. Par conséquent, les données existantes ne peuvent pas être remplacées.

Le mode "a" ne supprime pas le marqueur EOF avant l'ajout des données 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.

Lors de la "r+",``"w+", ou "a+" type d’accès est spécifié, la lecture et écriture sont autorisées (le fichier est réputé être ouvert pour « update »). Toutefois, lorsque vous basculez entre lecture et écriture, il doit y avoir une intervention fsetpos, fseek, ou rembobiner opération. La position actuelle peut éventuellement être spécifiée pour l'opération fsetpos ou fseek. 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
Ouvre en mode texte (traduit) ; les combinaisons retour chariot-saut de ligne sont traduites en caractères de saut de ligne unique en entrée ; les caractères de saut de ligne sont traduits en combinaisons retour chariot-saut de ligne 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. En effet, l'utilisation de fseek et ftell pour se déplacer dans un fichier peut amener fseek à se comporter de manière incorrecte vers la fin du fichier. L'option t est une extension Microsoft qui ne doit pas être utilisée là où la portabilité ANSI est souhaitée.

b
Ouvre en mode binaire (non traduit) ; 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 description des modes texte et binaire, consultez texte et e/s de fichier en Mode binaire.

FonctionEn-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 8.x 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 du Windows 8.x Store. Pour plus d'informations sur la compatibilité, voir Compatibilité.

// 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'  

Flux d’e/s
freopen, _wfreopen
fclose, _fcloseall
_fdopen, _wfdopen
_fileno
fopen, _wfopen
_open, _wopen
_setmode

Afficher: