freopen, _wfreopen

Riassegna un puntatore del file. Sono disponibili versioni più sicure delle funzioni; vedere freopen_s, _wfreopen_s.

Sintassi

FILE *freopen(
   const char *path,
   const char *mode,
   FILE *stream
);
FILE *_wfreopen(
   const wchar_t *path,
   const wchar_t *mode,
   FILE *stream
);

Parametri

path
Percorso del nuovo file.

mode
Tipo di accesso consentito.

stream
Puntatore alla struttura FILE .

Valore restituito

Ognuna di queste funzioni restituisce un puntatore al nuovo file aperto. Se si verifica un errore, il file originale viene chiuso e la funzione restituisce un NULL valore del puntatore. Se path, modeo stream è un puntatore Null o se filename è 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 NULL.

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

Osservazioni:

Esistono versioni più sicure di queste funzioni, vedere freopen_s, _wfreopen_s.

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

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 freopen freopen _wfreopen

freopen è 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 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 accodare "x" o "w""w+" per causare un errore della funzione 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.

mode Modificatore 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 se 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 <stdio.h>
_wfreopen <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.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'

Vedi anche

I/O di flusso
fclose, _fcloseall
_fdopen, _wfdopen
_fileno
fopen, _wfopen
_open, _wopen
_setmode