C ++ Ifstream per leggere i file

C ++ Ifstream per leggere i file
Ifstream sta per il file di input-file. "Input" si riferisce ai caratteri da un file che inserisce il programma in esecuzione. C'è anche il termine C ++, Of Stream, che sta per il fuliera di uscita. Tuttavia, questo articolo si concentra su ifstream. IfStream è una classe C ++, per la gestione della sequenza di byte nel computer, che proviene da un file nel disco, ed entra nel programma in esecuzione. IfStream è nella libreria (intestazione), fstream, che deve essere incluso nel programma del codice sorgente.

Un programma C ++ per utilizzare la classe IfStream dovrebbe iniziare come segue:

#includere
#includere
Utilizzo dello spazio dei nomi std;

La 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 ();
esplicito base_ifstream (const char* s, ios_base :: openmode modalità = ios_base :: in);
E
esplicito base_ifstream (const string & s, ios_base :: openmode modalità = ios_base :: in);

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";
ifStream ifs = ifStream (str, ios_base :: in);

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:

#includere

Apertura 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);
void open (const string & 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;
const char* str = "dir1/txtfile.TXT";
Ifs.aperto (str, ios_base :: in);

L'uso della seconda funzione membro aperta () qui (in questa sezione) può essere illustrato come segue:

ifstream ifs;
String Str = "Dir1/TxtFile.TXT";
Ifs.aperto (str, ios_base :: in);

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;
const char* str = "dir1/txtfile.TXT";
Ifs.aperto (str, ios_base :: in);
if (ifs.is_open () == true)
cout << "File is opened." << endl;
altro
cout << "File could not be open!" << endl;

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);
if (ifs.is_open () == true)
/* fai qualcosa con il file aperto qui. */
Ifs.vicino();
cout << "Opened File has been closed." << endl;

altro
cout << "File could not be open!" << endl;

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_istream& get (char_type & c);

Quando 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;
mentre (IFS.get (c))
cout << 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;
String STR;
mentre (IFS.get (c))
str.push_back (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:

#includere
#includere
#includere
Utilizzo dello spazio dei nomi std;
int main ()

ifStream ifs = ifStream ("DIR1/TXTFILE.txt ", ios_base :: in);
if (ifs.is_open () == true)
Char C;
String STR;
mentre (IFS.get (c))
str.push_back (c);
cout << str<< endl;
Ifs.vicino();
cout << "Opened File has been closed." << endl;

altro
cout << "File could not be open!" << endl;
restituzione 0;

Conclusione

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 ();
esplicito base_ifstream (const char* s, ios_base :: openmode modalità = ios_base :: in);
esplicito base_ifstream (const string & s, ios_base :: openmode modalità = ios_base :: in);

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);
void open (const string & 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& get (char_type & c);