Share via


Funzioni membro del flusso di file di output

Le funzioni membro del flusso di output sono di tre tipi: quelle equivalenti a manipolatori, quelle che eseguono operazioni di scrittura non formattate e quelle che modificano lo stato del flusso e non hanno un manipolatore o un operatore di inserimento equivalente . Per l'output formattato e sequenziale, è possibile usare solo operatori di inserimento e manipolatori. Per l'output del disco binario ad accesso casuale, usare altre funzioni membro, con o senza operatori di inserimento.

Funzione open per flussi di output

Per usare un flusso di file di output (ofstream), è necessario associare tale flusso a un file su disco specifico nel costruttore o nella open funzione . Se si usa la open funzione , è possibile riutilizzare lo stesso oggetto flusso con una serie di file. In entrambi i casi, gli argomenti che descrivono i file sono gli stessi.

Quando si apre il file associato a un flusso di output, in genere si specifica un open_mode flag. È possibile combinare questi flag, definiti come enumeratori nella ios classe , con l'operatore OR bit per bit ( | ). Vedere ios_base::openmode per un elenco degli enumeratori.

Tre situazioni di flusso di output comuni impiegano opzioni di modalità:

  • Creazione di un file. Se il file esiste già, la versione precedente viene eliminata.

    ofstream ofile("FILENAME");
    // Default is ios::out
    
    ofstream ofile("FILENAME", ios::out);
    // Equivalent to above
    
  • Aggiunta di record a un file esistente o creazione di un file, se non esiste.

    ofstream ofile("FILENAME", ios::app);
    
  • Apertura di due file, uno alla volta, nello stesso flusso.

    ofstream ofile();
    ofile.open("FILE1", ios::in);
    // Do some output
    ofile.close();    // FILE1 closed
    ofile.open("FILE2", ios::in);
    // Do some more output
    ofile.close();    // FILE2 closed
    // When ofile goes out of scope it is destroyed.
    

Funzione put

La put funzione scrive un carattere nel flusso di output. Le due istruzioni seguenti sono uguali per impostazione predefinita, ma la seconda è influenzata dagli argomenti format del flusso:

cout.put('A');

// Exactly one character written
cout <<'A'; // Format arguments 'width' and 'fill' apply

Funzione write

La write funzione scrive un blocco di memoria in un flusso di file di output. L'argomento length specifica il numero di byte scritti. In questo esempio viene creato un flusso di file di output in cui viene scritto il valore binario della struttura Date:

// write_function.cpp
// compile with: /EHsc
#include <fstream>
using namespace std;

struct Date
{
   int mo, da, yr;
};

int main( )
{
   Date dt = { 6, 10, 92 };
   ofstream tfile( "date.dat" , ios::binary );
   tfile.write( (char *) &dt, sizeof dt );
}

La write funzione non si arresta quando raggiunge un NULL carattere, quindi viene scritta la struttura completa della classe. La funzione accetta due argomenti: un puntatore char e un conteggio di caratteri da scrivere. Prendere nota del cast necessario a char * prima dell'indirizzo dell'oggetto struttura.

Funzioni seekp e tellp

Un flusso di file di output mantiene un puntatore interno che punta alla posizione in cui verranno successivamente scritti i dati. La funzione membro seekp imposta questo puntatore, garantendo pertanto l'output di file su disco ad accesso casuale. La funzione membro tellp restituisce la posizione del file. Per esempi che usano il flusso di input equivalente a seekp e tellp, vedere Funzioni seekg e tellg.

Funzione close per flussi di output

La close funzione membro chiude il file del disco associato a un flusso di file di output. Per completare tutto l'output del disco, è necessario chiudere il file. Se necessario, il ofstream distruttore chiude il file, ma è possibile usare la close funzione se è necessario aprire un altro file per lo stesso oggetto flusso.

Il distruttore del flusso di output chiude automaticamente il file di un flusso solo se il costruttore o la open funzione membro ha aperto il file. Se si passa il costruttore un descrittore di file per un file già aperto o si usa la attach funzione membro, è necessario chiudere il file in modo esplicito.

Funzioni di elaborazione degli errori

Usare queste funzioni membro per verificare gli errori durante la scrittura in un flusso:

Funzione Valore restituito
bad Restituisce true se si verifica un errore irreversibile.
fail Restituisce true se si verifica un errore irreversibile o una condizione "prevista", ad esempio un errore di conversione o se il file non viene trovato. L'elaborazione può spesso riprendere dopo una chiamata a clear con un argomento zero.
good Restituisce true se non è presente alcuna condizione di errore (irreversibile o in caso contrario) e il flag di fine del file non è impostato.
eof Restituisce true la condizione di fine del file.
clear Imposta lo stato di errore interno. Se chiamato con gli argomenti predefiniti, cancella tutti i bit di errore.
[rdstate](basic-ios-class.md#rdstate Restituisce lo stato di errore corrente.

L'operatore ! è sottoposto a overload per eseguire la stessa funzione della fail funzione. Pertanto, l'espressione:

if(!cout)...

Equivale a:

if(cout.fail())...

L'operatore void*() è sottoposto a overload in modo che sia l'opposto dell'operatore ! , quindi l'espressione:

if(cout)...

è uguale a:

if(!cout.fail())...

L'operatore void*() non equivale a good perché non esegue il test per la fine del file.

Vedi anche

Output Streams (Flussi di output)