Condividi tramite


freopen_s, _wfreopen_s

Chiude il file attualmente associato a oldStream e riassegnato stream al file specificato da fileName.

Queste versioni di hanno _wfreopenmiglioramenti perfreopen la sicurezza, come descritto in Funzionalità di sicurezza in CRT.

Sintassi

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
);

Parametri

stream
Parametro out che punterà al flusso riaperto quando la funzione viene restituita.

fileName
Percorso del file da riaprire.

mode
Modalità per il flusso riaperto.

oldStream
Flusso da riaprire. Viene scaricata e tutti i file associati a esso vengono chiusi.

Valore restituito

Zero in caso di esito positivo; in caso contrario, un codice di errore. Se si verifica un errore, il file originale viene chiuso e NULL viene scritto in stream , a meno che non stream sia anche NULL

Per altre informazioni sui codici di errore, vedere errno, _doserrno, _sys_errliste _sys_nerr.

Osservazioni:

La freopen_s funzione viene in genere usata per collegare i flussi pre-aperti associati a stdinstdout e stderr a un altro file.

La freopen_s funzione chiude il file attualmente associato e stream riassegnato stream al file specificato da path. _wfreopen_s è una versione a caratteri wide di freopen_s. Gli argomenti per path e mode per _wfreopen_s sono stringhe a caratteri wide. In caso contrario,_wfreopen_s e freopen_s si comportano in modo identico.

Se uno qualsiasi di pFile, modepath, o stream è NULLo se path è una stringa vuota, queste funzioni richiamano il gestore di parametri non validi, come descritto in Convalida dei parametri. Se l'esecuzione può continuare, queste funzioni impostano errno su EINVAL e restituiscono EINVAL.

Per impostazione predefinita, lo stato globale di questa funzione è limitato all'applicazione. Per modificare questo comportamento, vedere Stato globale in CRT.

Mapping di routine di testo generico

TCHAR.H routine _UNICODE e _MBCS non definito _MBCS definito _UNICODE definito
_tfreopen_s freopen_s freopen_s _wfreopen_s

freopen_s è in genere usato per reindirizzare i file già aperti stdin, stdout e 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 richiesto per il file, come indicato di seguito:

mode Accesso
"r" Viene aperto per la lettura. Se il file non esiste o non è stato trovato, la freopen_s chiamata non riesce.
"w" Apre un file vuoto per la scrittura. Se il file specificato esiste, il contenuto viene eliminato in modo permanente.
"a" Viene aperto per la scrittura alla fine del file (aggiunta) senza rimuovere il marcatore di fine file (EOF) prima che nuovi dati vengano scritti sul file. Creare il file se non esiste.
"r+" Viene aperto per la lettura e la scrittura. Il file deve esistere.
"w+" Apre un file vuoto per la lettura e la scrittura. Se il file esiste, il contenuto viene eliminato in modo permanente.
"a+" Viene aperto per la lettura e l'aggiunta. L'operazione di aggiunta comporta la rimozione del marcatore di EOF prima che nuovi dati vengano scritti sul file. L'indicatore EOF non viene ripristinato al termine della scrittura. Creare il file se non esiste.

Usa i tipi "w" e "w+" con cautela, poiché possono distruggere i file esistenti. A partire da C11, è possibile aggiungere "x" o "w+" "w" per fare in modo che la funzione non riesca se il file esiste, anziché sovrascriverlo.

Quando un file viene aperto con il tipo di accesso "a" o "a+", tutte le operazioni di scrittura si verificano alla fine del file. Anche se il puntatore al file può essere riposizionato usando fseek o rewind, il puntatore al file viene sempre spostato alla fine del file prima di eseguire qualsiasi operazione di scrittura. Di conseguenza, i dati esistenti non possono essere sovrascritti.

La "a" modalità non rimuove il marcatore EOF prima dell'aggiunta al file. Una volta eseguita l'aggiunta, con il comando MS-DOS TYPE vengono visualizzati solo i dati fino al marcatore EOF originale e non i eventualmente aggiunti al file. La modalità "a+" rimuove il marcatore EOF prima di aggiungere il file. Dopo l'aggiunta, il comando MS-DOS TYPE visualizza tutti i dati nel file. La modalità "a+" è necessaria per l'aggiunta a un file di flusso terminato con il marcatore EOF CTRL+Z.

Quando il tipo di accesso "r+", "w+" o "a+" viene specificato, sono consentite sia la lettura che la scrittura (il file viene definito aperto per "l'aggiornamento"). Tuttavia, quando si passa dalla lettura alla scrittura, deve essere presente un'operazione , fseeko rewind intercorrentefsetpos. È possibile specificare la posizione corrente per l'operazione fsetpos o fseek , se necessario. Oltre ai valori specificati sopra, è possibile includere uno dei caratteri seguenti nella stringa mode per specificare la modalità di conversione per le nuove righe.

Modificatore mode Modalità di traduzione
t Aprire in modalità testo (convertita).
b Apri in modalità binaria (non tradotta); le traduzioni che coinvolgono caratteri ritorno a capo e avanzamento riga vengono eliminate.

In modalità testo (tradotto), le combinazioni di ritorno a capo (CR-LF) vengono convertite in caratteri LF (Single Line Feed) all'input; I caratteri LF vengono convertiti in combinazioni CR-LF nell'output. Inoltre, CTRL+Z viene interpretato nell'input come carattere di fine file. Nei file aperti per la lettura o per la lettura e scrittura con "a+" la libreria di runtime verifica la presenza di una combinazione CTRL+Z alla fine del file e la rimuove, se possibile. Viene rimosso perché l'uso fseek e ftell lo spostamento all'interno di un file possono causare fseek un comportamento non corretto alla fine del file. Non usare l'opzione t quando si vuole la portabilità ANSI perché si tratta di un'estensione Microsoft.

Se t o b non viene specificato in mode, la modalità di conversione predefinita viene definita dalla variabile _fmodeglobale . Se t o b è il prefisso dell'argomento, la funzione ha esito negativo e restituisce NULL.

Per una descrizione delle modalità di testo e binario, vedere I/O di file in modalità testo e binario.

Requisiti

Funzione Intestazione obbligatoria
freopen_s <stdio.h>
_wfreopen_s <stdio.h> oppure <wchar.h>

La console non è supportata nelle app piattaforma UWP (Universal Windows Platform) (UWP). Gli handle di flusso standard associati alla console, stdin, stdoute stderrdevono essere reindirizzati prima che le funzioni di runtime C possano usarle nelle app UWP.

Per altre informazioni sulla compatibilità, vedere Compatibility (Compatibilità).

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" );
}
successfully reassigned
This will go to the file 'freopen.out'

Vedi anche

Stream I/O
freopen, _wfreopen
fclose, _fcloseall
_fdopen, _wfdopen
_fileno
fopen, _wfopen
_open, _wopen
_setmode