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)