Condividi tramite


freopen, _wfreopen

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

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 file appena aperto. Se si verifica un errore, il file originale viene chiuso e la funzione restituisce un valore del puntatore NULL. Se path, mode, o stream è un puntatore a null, oppure se filename è una stringa vuota, queste funzioni richiamano il gestore di parametro non valido, come descritto in Convalida dei parametri. Se l'esecuzione può continuare, queste funzioni impostano errno a EINVAL e restituiscono NULL.

Vedere _doserrno, errno, _sys_errlist, e _sys_nerr per ulteriori informazioni su questi, e altri, codici di errore.

Note

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

La funzione freopen chiude il file attualmente associato allo stream e riassegna lo stream al file specificato dal path*.* _wfreopen è una versione a caratteri estesi di _freopen; il path e gli argomenti mode di _wfreopen sono stringhe di caratteri estesi. _wfreopen e _freopen si comportano in modo identico in caso contrario.

Mapping di routine su testo generico

Routine TCHAR.H

_UNICODE & _MBCS non definiti

_MBCS definito

_UNICODE definito

_tfreopen

freopen

freopen

_wfreopen

freopen in genere viene utilizzata per reindirizzare i file precedentemente aperti stdin, stdout e stderr ai file specificati dall'utente. Il nuovo file associato a stream è aperto con mode*,* ovvero una stringa di caratteri che specifica il tipo di accesso richiesto per il file, come segue:

  • "r"
    Viene aperto per la lettura. Se il file non esiste o non viene trovato, la chiamata a freopen avrà esito negativo.

  • "w"
    Apre un file vuoto per la scrittura. Se il file specificato esiste, il contenuto viene eliminato in modo permanente.

  • "a"
    Verrà aperto per la scrittura alla fine del file (in aggiunta) senza rimuovere il marcatore di EOF prima di scrivere i nuovi dati nel file; prima crea 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 specificato esiste, il contenuto viene eliminato in modo permanente.

  • "a+"
    Verrà aperto per la lettura e l'aggiunta; l'operazione di aggiunta comporta la rimozione del marcatore EOF prima che i dati siano scritti nel file e il marcatore EOF viene ripristinato dopo che la scrittura è stata completata; prima crea il file se non esiste.

Utilizzare con attenzione i tipi "w+" e "w", in quanto è possibile distruggere file esistenti.

Quando un file viene aperto con il tipo di accesso "a+" o "a", tutte le operazioni di scrittura vengono fatte alla fine del file. Sebbene il puntatore del file venga riposizionato utilizzando fseek o rewind, il puntatore del file viene spostato sempre alla fine del file prima che venga effettuata qualsiasi operazione di scrittura. Pertanto, i dati esistenti non possono essere sovrascritti.

La modalità "a" non rimuove il marcatore di EOF prima di scrivere in coda 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 tutti i dati eventualmente aggiunti al file. La modalità "a+" non rimuove il marcatore EOF prima di scrivere in coda al 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 che termina 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 da lettura e scrittura, devono esserci delle operazione intermedie fsetpos, fseek o rewind. La posizione corrente può essere specificata per l'operazione fseek o fsetpos. Oltre ai valori precedenti, uno dei seguenti caratteri può essere incluso nella stringa mode per specificare la modalità di traduzione per le nuove righe.

  • t
    Aprire in modalità di testo (traduzione); le combinazioni di ritorno a capo/avanzamento della riga (CR-LF) vengono convertite in caratteri singoli di avanzamento (LF) nell'input; i caratteri LF sono tradotti come combinazioni CR-LF di output. Inoltre, CTRL+Z viene interpretato nell'input come carattere di fine file. Nei file aperti per la lettura o la scrittura e la lettura mediante "a+", la libreria di runtime controlla la presenza di un CTRL+Z alla fine del file e se possibile, lo rimuove. Questa operazione viene eseguita perché utilizzando fseek e ftell per spostarsi all'interno di un file che termina con un CTRL+Z, l'operazione fseek può causare un comportamento anomalo vicino alla fine del file. L'opzione t è un'estensione Microsoft che non deve essere utilizzata quando si vuole utilizzare la portabilità ANSI.

  • b
    Aprire in modalità binaria (non tradotta); le conversioni precedenti vengono eliminate.

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

Per una descrizione della modalità binaria e di testo, vedere I/O dei File in modalità di Testo o Binaria.

Requisiti

Funzione

Intestazione obbligatoria

freopen

<stdio.h>

_wfreopen

<stdio.h> o <wchar.h>

La console non è supportata nelle applicazioni Windows Store. Gli handle del flusso standard associati alla console,stdin, stdout e stderr, devono essere reindirizzati prima di poter utilizzare le funzioni di runtime del linguaggio C nelle applicazioni Windows Store. Per ulteriori informazioni sulla compatibilità, vedere 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" );
}
  

Equivalente .NET Framework

Vedere anche

Riferimenti

I/O di flusso

fclose, _fcloseall

_fdopen, _wfdopen

_fileno

fopen, _wfopen

_open, _wopen

_setmode