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
_wfreopen
sé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
_doserrno
et _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 , , path
ou mode
stream
sont NULL
ou s’il path
s’agit d’une chaîne vide, ces fonctions appellent le gestionnaire de pFile
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 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 fseek
rewind
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, mode
le mode de traduction par défaut est défini par la variable _fmode
globale. 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