freopen_s, _wfreopen_s
Réassignez un pointeur de fichier.Ce sont des versions d' freopen, _wfreopen avec des améliorations de sécurité comme décrit dans Fonctionnalités de sécurité du 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 de fichier.[in] mode
Type d'accès autorisé.[in] stream
Pointeur vers la structure d' 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 d' freopen_s ferme le fichier actuellement associées à stream et réaffecte stream au fichier spécifié par path._wfreopen_s est une version à caractère élargi d' _freopen_s; les arguments d' path et d' mode à _wfreopen_s sont des chaînes à caractères larges._wfreopen_s et _freopen_s se comportent de sinon.
Si l'une d' pFile, d' path, d' mode, ou d' stream sont NULL, ou si path est une chaîne vide, ces fonctions appelle le gestionnaire de paramètre non valide, comme décrit dans Validation des paramètres.Si est autorisé à l'exécution pour continuer, ces errno défini par fonctions à EINVAL et à EINVALde retour.
Mappages de routines de texte générique
Routine de TCHAR.H |
_UNICODE et non définis _MBCS |
_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éalable ouverts stdin, stdout, et stderr aux fichiers spécifiés par l'utilisateur.Le nouveau fichier associé à stream s'ouvre avec mode*,* qui est une chaîne spécifiant le type d'accès demandé pour le fichier, comme suit :
"r"
S'ouvre pour la lecture.Si le fichier n'existe pas ou est introuvable, l'appel d' freopen_s échoue."w"
Ouvre un fichier vide pour écrire.Si le fichier spécifié existe, son contenu est détruit."a"
S'ouvre pour écrire à la fin de le fichier (ajouter) sans supprimer marqueur EOF avant d'entrer de nouvelles données vers le fichier ; crée le fichier d'abord s'il n'existe pas."r+"
S'ouvre pour la lecture et l'écriture.(Le fichier doit exister.)"w+"
Ouvre un fichier vide pour la lecture et l'écriture.Si le fichier spécifié existe, son contenu est détruit."a+"
S'ouvre pour lire et ajouter ; l'opération d'ajout inclut la suppression de marqueur EOF avant de nouvelles données sont écrites dans le fichier et marqueur EOF est restauré une fois que l'écriture terminé ; crée le fichier d'abord s'il n'existe pas.
Utilisez des types d' "w" et d' "w+" avec précaution, comme il peut détruire des fichiers existants.
Lorsqu'un fichier est ouvert au type d'accès d' "a" ou d' "a+", toutes les opérations d'écriture ont lieu à la fin de le fichier.Bien que le pointeur de fichier puisse être réadressé à l'aide de fseek ou rewind, le pointeur de fichier est toujours déplacé vers la fin du fichier avant qu'une opération d'écriture soit exécutée.Par conséquent, les données existantes ne peuvent pas être remplacées.
Le mode d' "a" ne supprime pas marqueur EOF avant d'ajouter vers le fichier.Après avoir ajouté s'est produit, le TYPE de commande MS-DOS affiche uniquement les données jusqu'à EOF marqueur d'origine et non les données ajoutées au fichier.Le mode d' "a+" supprime marqueur EOF avant d'ajouter vers le fichier.Après avoir ajouté, le TYPE de commande MS-DOS affiche toutes les données dans le fichier.Le mode d' "a+" est requis pour ajouter à un fichier de flux qui a fini CTRL+Z le marqueur EOF.
Lorsque "r+","w+", ou le type d'accès d' "a+" est spécifié, il permet la lecture et l'écriture (le fichier est dit ouvert pour « update »).Toutefois, lorsque vous basculez entre la lecture et l'écriture, il doit y avoir fsetposintervenant, fseek, ou opération d' rebobinage .La position actuelle peut être spécifiée pour l'exécution d' fsetpos ou d' fseek, si vous le souhaitez.Outre les valeurs ci-dessus, l'un des caractères suivants peuvent être inclus dans la chaîne d' mode pour spécifier un en mode de traduction pour les nouvelles lignes.
t
Ouvrez en mode de texte (traduits) ; les combinaisons de saut de ligne-retour de chariot (CR-LF) sont traduites en caractères unique de (LF) de saut de ligne sur 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ète comme un caractère de fin de fichier sur l'entrée.Dans les fichiers ouverts pour lire ou d'écrire et lire à "a+", la bibliothèque Runtime vérifie un CTRL+Z à la fin de le fichier et le supprime, si possible.Cette opération est exécutée car l'utilisation d' fseek et d' ftell pour déplacer dans un fichier peut être comporter fseek incorrectement près de la fin de le fichier.L'option d' t est une extension Microsoft qui ne doit pas être utilisée lorsque la portabilité ANSI est souhaitée.b
Ouvrez en mode (non traduit) binaire ; les traductions ci-dessus sont supprimées.
Si t ou b n'est pas donné dans mode, à l'état de interprétation par défaut est défini par la variable globale _fmode.Si t ou b est préfixé à l'argument, la fonction échoue et retourne NULL.
Pour en savoir plus sur les modes de texte et binaire, consultez l' 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 d' Windows Store .Les handles standard de flux de données associés à la console, stdin, stdout, et stderr, doivent être redirigés pour que les fonctions runtime C peuvent les utiliser dans des applications d' Windows Store .Pour des informations de compatibilité supplémentaires, consultez l' Compatibilité dans l'introduction.
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
System::IO::FileStream::FileStream