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 mode
stream
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
_doserrno
et _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 routines de texte générique
Routine TCHAR.H |
_UNICODE et _MBCS non définis |
_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 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
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, 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 |
<stdio.h> |
_wfreopen |
<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.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