Un programma C ++ per utilizzare la classe IfStream dovrebbe iniziare come segue:
#includereLa prima riga include l'intestazione che ha la definizione della classe IfStream. La seconda riga include l'intestazione iostream che ha l'oggetto Cout per la stampa di uscita sul terminale (console). La terza riga è una dichiarazione e non una direttiva. Lo spazio dei nomi standard è qualsiasi nome seguito da "std:;".
Questo articolo spiega l'uso della classe IfStream dell'intestazione FStream, per gestire l'input da un file in disco in un programma in esecuzione. L'input è caratteri in sequenza che vanno a un buffer in memoria prima di raggiungere il programma. In altre parole, questo articolo spiega come leggere un file di testo, dal disco, in C++.
Creazione di un oggetto ifstream
Per leggere il contenuto di un file in disco, un oggetto IfStream deve essere istanziato dalla classe IfStream. I costruttori comunemente usati dai programmatori anglosassoni (compresi l'Europa occidentale) sono:
basic_ifstream ();Il prefisso, "base_" può essere omesso per tutte e tre le sintassi. L'uso della prima sintassi qui sarà illustrato nella prossima sezione. Nella seconda sintassi, il primo argomento è una stringa letterale o una serie di caratteri che terminano in '\ 0'. Questa stringa è un percorso di directory e un nome file, E.G. “DIR1/TXTFILE.txt ”, supponendo che il programma sia nella directory di casa/utente. Per la seconda sintassi, il primo argomento è lo stesso del primo argomento della sintassi precedente, ma è una stringa della classe di stringa (intestazione). In entrambi i sintassi, il secondo argomento dovrebbe essere "ios_base :: in" dove "in" significa leggere (input).
Illustrazione
Una dichiarazione di costruzione per la seconda sintassi è la seguente:
ifStream ifs = ifStream ("DIR1/TXTFILE.txt ", ios_base :: in);Il nome del file il cui contenuto deve essere letto è: "txtfile.TXT". Dopo questa affermazione, il file "txtfile.txt "è considerato aperto nel programma in esecuzione. Quando viene aperto un file, una sequenza di caratteri consecutivi che rappresentano il file è in memoria per il controllo del buffer.
Un segmento di codice di costruzione per la terza sintassi è:
String Str = "Dir1/TxtFile.TXT";In entrambe le situazione, IFS è l'oggetto ifstream del file aperto. Con il tipo di stringa, non dimenticare di includere la classe String (intestazione) nel programma come segue:
#includereApertura di un file
Si dice che un file venga aperto quando una sequenza di caratteri consecutivi del file che rappresenta il file è in memoria per il controllo del buffer. La seconda e la terza sintassi di costruzione sopra aprono il file per la lettura, ma la prima sintassi no. Cioè, la seconda e la terza sintassi eseguono l'istanziazione dell'oggetto ifstream e l'apertura anche del file, mentre la prima sintassi. L'oggetto IFS può essere istanziato dalla classe ifstream usando la prima sintassi con l'istruzione:
ifstream ifs;In questo caso, è stato creato un oggetto file IFS ma il file non è stato ancora aperto. Per aprire il file per la lettura, è necessario utilizzare la funzione membro aperto della classe IfStream. I metodi open () sovraccaricano comunemente usati dai programmatori anglosassoni (compresi l'Europa occidentale):
void Open (const char* s, ios_base :: openmode modalità = ios_base :: in);Si noti che la dichiarazione di costruzione "ifstream ifs;" non menziona alcun file nel disco. E così il primo e il secondo argomento di queste funzioni di membro aperto () hanno gli stessi significati di quelli per la seconda e la terza sintassi di costruzione sopra rispettivamente.
Illustrazione
L'uso della prima funzione membro aperta () qui (in questa sezione), può essere illustrato come segue:
ifstream ifs;L'uso della seconda funzione membro aperta () qui (in questa sezione) può essere illustrato come segue:
ifstream ifs;La differenza nei due segmenti di codice è il modo in cui sono costruite la stringa per il percorso e il nome file.
È stato aperto il file?
Si dice che un file venga aperto, quando una sequenza di caratteri consecutivi del file che rappresenta il file è in memoria per il controllo del buffer. E se il percorso e/o il nome file fossero sbagliati? E se il file non potesse essere aperto perché il disco era cattivo e i suoi settori non potevano essere letti? Si consiglia sempre di verificare se il file è stato aperto utilizzando la sintassi:
bool is_open () const;is_open () è una funzione membro della classe IfStream. Restituisce vero, se il file è stato aperto correttamente e falso altrimenti. Il seguente segmento di codice illustra l'uso di questa funzione membro:
ifstream ifs;L'output dovrebbe essere:
Il file è aperto.Chiusura di un file
Un file dovrebbe essere chiuso dopo che è stato aperto. L'azione di chiusura interrompe il buffer in memoria, liberando lo spazio di memoria per altre attività. Rompe anche con grazia la connessione che ha effettuato con il file in disco. Se Stream ha la funzione membro Close () per chiudere un file aperto. La sintassi è:
void vicino ();Il seguente segmento di codice illustra il suo uso:
ifStream ifs = ifStream ("DIR1/TXTFILE.txt ", ios_base :: in);L'output è:
Il file aperto è stato chiuso.Il file dovrebbe essere utilizzato quando il programmatore è sicuro che sia stato aperto, quindi chiuso dopo.
Leggere i personaggi uno per uno
ifstream ha una funzione membro la cui sintassi è:
base_istreamQuando ottiene il personaggio successivo, lo inserisce nella variabile C e restituisce l'oggetto dell'IfStream ereditato da Basic_istream. Il puntatore interno di IfStream indica quindi il personaggio successivo per la lettura successiva. Quando viene raggiunta la fine del file, l'oggetto restituito viene convertito in falso.
Il seguente segmento di codice legge tutti i caratteri nel file uno per uno e invia ciascuno al terminale (console):
Char C;C deve essere dichiarato per primo. C è l'argomento di get (), che è una funzione membro dell'oggetto ifstream. L'unica semplice affermazione (cout << c;) of the while compound statement sends a copy of the character to the output.
Invece di inviare i caratteri all'output, possono essere inviati a un oggetto stringa, formando una lunga stringa come segue:
Char C;In questo caso, l'intestazione della stringa (libreria) deve essere inclusa nel programma.
Il seguente programma legge tutto il contenuto di un file e lo visualizza:
#includereConclusione
La classe ifstream dell'intestazione FStream gestisce l'input da un file da disco in un programma in esecuzione. Per creare un oggetto ifstream, utilizzare una delle sintassi:
basic_ifstream ();Se viene utilizzata la prima sintassi, deve ancora essere aperto l'oggetto, con una delle seguenti sintassi della funzione del membro:
void Open (const char* s, ios_base :: openmode modalità = ios_base :: in);Per sapere se un file viene aperto correttamente, utilizzare la sintassi della funzione membro:
bool is_open () const;L'oggetto ifstream deve essere chiuso dopo l'uso.
Per leggere i caratteri uno per uno, utilizzare in un loop while, la sintassi della funzione del membro:
base_istream