freopen_s, _wfreopen_s
Posizionare il puntatore del file.Queste sono versioni di freopen, _wfreopen con i miglioramenti della sicurezza come descritto in Funzionalità di sicurezza in 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
);
Parametri
[out] pFile
Un puntatore al puntatore del file da fornire la chiamata.[in] path
Percorso del file.[in] mode
Tipo di accesso consentito.[in] stream
Puntatore alla struttura FILE.
Valore restituito
Ognuna di queste funzioni restituisce un codice di errore.Se si verifica un errore, il file originale viene chiuso.
Note
La funzione di freopen_s chiude il file attualmente associato a stream e riassegna stream nel file specificato da path._wfreopen_s è una versione a caratteri estesi di _freopen_s; gli argomenti di mode e di path a _wfreopen_s sono stringhe di caratteri estesi._wfreopen_s e _freopen_s si comportano in modo identico in caso contrario.
Se uno di pFile, di path, di mode, o di stream sono NULL, o se path è una stringa vuota, queste funzioni richiamare il gestore non valido di parametro, come descritto in Convalida dei parametri.Se l'esecuzione può continuare, queste funzioni impostano errno a EINVAL e restituiscono EINVAL.
Mapping di routine a Testo generico
TCHAR.H routine |
_UNICODE & _MBCS non definiti |
_MBCS definito |
_UNICODE definito |
---|---|---|---|
_tfreopen_s |
freopen_s |
freopen_s |
_wfreopen_s |
freopen_s in genere utilizzato per reindirizzare i file precedentemente aperti stdin, stdoute stderr ai file specificati dall'utente.Il nuovo file associato a stream viene aperto con mode*,* ovvero una stringa di caratteri che specifica il tipo di accesso richiesta di file, come segue:
"r"
Verrà aperto per leggere.Se il file non esiste o non è definito, la chiamata di freopen_s non riesce."w"
Apre un file vuoto per scrivere.Se il file specificato esiste, il contenuto viene eliminato."a"
Verrà aperto per la scrittura alla fine del file aggiungere () senza rimuovere il marcatore di EOF prima di scrivere i dati nuovi al file; crea il file innanzitutto se non esiste."r+"
Viene aperto per la lettura e scrittura.(Il file deve esistere.)"w+"
Apre un file vuoto per la lettura e scrittura.Se il file specificato esiste, il contenuto viene eliminato."a+"
Verrà aperto per la lettura e aggiungere; l'operazione di spooling comporta la rimozione del marcatore di EOF prima che i nuovi dati vengono scritti nel file e il marcatore di EOF venga ripristinato dopo la scrittura è completa, crea il file innanzitutto se non esiste.
Utilizzare con attenzione i tipi di "w+" e di "w", ad esempio possibile eliminare i file esistenti.
Quando un file viene aperto al tipo di accesso di "a+" o di "a", tutte le operazioni di scrittura vengono eseguite alla fine del file.Sebbene il puntatore del file venga riposizionato utilizzando fseek o di rewind, il puntatore del file viene spostato sempre alla fine del file prima che qualsiasi operazione di scrittura sia eseguita.Pertanto, i dati esistenti non possono essere sovrascritti.
La modalità di "a" non rimuove il marcatore di EOF prima di aggiungere al file.Dopo avere aggiunto si verifica, il comando TIPO1 MS-DOS vengono visualizzati solo i dati del marcatore di EOF originale e non i dati associati al file.La modalità di "a+" rimuove il marcatore di EOF prima di aggiungere al file.Dopo avere aggiunto, il comando di TIPO1 MS-DOS mostra tutti i dati nel file.La modalità di "a+" è necessario per aggiungere a un file del flusso che termina con il marcatore di CTRL+Z EOF.
Quando "r+","w+", o il tipo di accesso di "a+" è specificato, la lettura e la scrittura sono consentite (il file viene aperto per "l'aggiornamento").Tuttavia, quando si passa tra lettura e scrittura, deve essere fsetposcorrispondente, fseek, o un'operazione di rewind.La posizione corrente può essere specificata per l'operazione di fseek o di fsetpos, se desiderata.Oltre ai valori in precedenza, uno dei seguenti caratteri può essere incluso nella stringa di mode per specificare la modalità di traduzione per le nuove righe.
t
Aprire la modalità di testo (tradotto); combinazioni di ritorno a capo-avanzamento shopping (CR-LF) vengono convertite in singoli caratteri di (LF) di avanzamento riga in input; I caratteri di LF vengono tradotti alle combinazioni di CR-LF di output.Inoltre, CTRL+Z viene interpretato come carattere di fine file di input.In aprire file per la lettura o la scrittura e la lettura da "a+", la libreria di runtime di un CTRL+Z alla fine del file e la rimozione, se possibile.Questa operazione viene eseguita perché utilizzando fseek e ftell per spostarsi all'interno di un file può causare fseek a comporta in modo errato alla fine del file.L'opzione di t è un'estensione Microsoft che non deve essere utilizzata in cui la portabilità ANSI viene desiderata.b
Aprire in modalità (non tradotta binaria); le conversioni sopra eliminati.
Se t o b non è modefornito in, la modalità di traduzione predefinita definita la variabile globale _fmode.Se t o b è provvisto all'argomento, la funzione ha esito negativo e restituisce NULL.
Per informazioni sulle modalità del binario e testo, vedere La modalità binario e testo consente l'i/o.
Requisiti
Funzione |
Intestazione obbligatoria |
---|---|
freopen_s |
<stdio.h> |
_wfreopen_s |
<stdio.h> o <wchar.h> |
La console non è supportata nelle applicazioni di Windows Store.L'handle standard del flusso associate alla console, stdin, stdoute stderr, devono essere reindirizzati prima di funzioni di runtime del linguaggio C possono essere utilizzate nelle applicazioni di Windows Store.Per ulteriori informazioni sulla compatibilità, vedere Compatibilità nell'introduzione.
Esempio
// 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" );
}
Equivalente .NET Framework
System::IO::FileStream::FileStream