C ++ Ifstream zum Lesen von Dateien

C ++ Ifstream zum Lesen von Dateien
IfStream steht für Input-File-Stream. "Input" bezieht sich auf Zeichen einer Datei, die das laufende Programm eingibt. Es gibt auch den C ++-Term Ofstream, der für den Ausgangsfilmstream steht. Dieser Artikel konzentriert sich jedoch auf Ifstream. IfStream ist eine C ++ - Klasse für die Handhabung der Byte -Sequenz im Computer, die aus einer Datei in der Festplatte stammt und das laufende Programm eingibt. Ifstream befindet sich in der Bibliothek (Header), Fstream, die in das Quellcodeprogramm aufgenommen werden muss.

Ein C ++ - Programm zur Verwendung der IfStream -Klasse sollte wie folgt beginnen:

#enthalten
#enthalten
Verwenden von Namespace STD;

Die erste Zeile enthält den Header, der die Definition der Ifstream -Klasse hat. Die zweite Zeile enthält den iOstream -Header, der das Cout -Objekt zum Drucken der Ausgabe an der Klemme (Konsole) enthält. Die dritte Zeile ist eine Aussage und keine Richtlinie. Der Standard -Namespace ist ein beliebiger Name, gefolgt von "STD:;".

In diesem Artikel wird die Verwendung der Ifstream -Klasse des FStream -Headers erläutert, um Eingaben von einer Datei in der Festplatte in ein laufendes Programm zu verarbeiten. Die Eingabe ist Zeichen in Sequenz, die vor dem Erreichen des Programms zu einem Puffer im Speicher gehen. Mit anderen Worten, in diesem Artikel erklärt++.

Erstellen eines Ifstream -Objekts

Um den Inhalt einer Datei in der Festplatte zu lesen, muss ein Ifstream -Objekt aus der Ifstream -Klasse instanziiert werden. Die Konstruktoren, die üblicherweise von angelsächsischen (einschließlich westeuropäischen) Programmierern verwendet werden, sind:

Basic_ifstream ();
explizite Basic_ifstream (const char* s, ios_base :: openMode modus = ios_base :: in);
Und
explizite Basic_ifstream (const string & s, ios_base :: openMode modus = ios_base :: in);

Das Präfix „Basic_“ kann für alle drei Syntaxe weggelassen werden. Die Verwendung der ersten Syntax hier wird im nächsten Abschnitt veranschaulicht. In der zweiten Syntax ist das erste Argument ein literaler Streicher oder ein Array von Zeichen, die in '\ 0' enden. Diese Zeichenfolge ist ein Verzeichnispfad und ein Dateiname, e.G. “DIR1/TXTFILE.txt ”unter der Annahme, dass sich das Programm im Heim-/Benutzerverzeichnis befindet. Für die zweite Syntax ist das erste Argument das gleiche wie das erste Argument der vorherigen Syntax, aber es handelt sich um eine Zeichenfolge der String -Klasse (Header). In beiden Syntaxen sollte das zweite Argument "iOS_Base :: in" sein, wobei "in" in Lesen bedeutet (Eingabe).

Illustration

Eine Konstruktionserklärung für die zweite Syntax lautet wie folgt:

ifstream ifs = ifStream ("Dir1/txtfile.txt ", ios_base :: in);

Der Name der Datei, deren Inhalt gelesen werden soll, lautet „txtFile.txt". Nach dieser Anweisung die Datei “txtFile.txt ”wird im laufenden Programm als offen angesehen. Wenn eine Datei geöffnet wird, befindet sich eine Folge von aufeinanderfolgenden Zeichen, die die Datei darstellen.

Ein Segment für Konstruktionscode für die dritte Syntax ist:

String str = "Dir1/txtfile.txt";
ifstream ifs = ifStream (str, ios_base :: in);

In beiden Situationen ist IFS das Ifstream -Objekt der geöffneten Datei. Vergessen Sie mit dem String -Typ nicht, die String -Klasse (Header) in das Programm wie folgt einzubeziehen:

#enthalten

Öffnen einer Datei

Eine Datei soll geöffnet werden, wenn eine Folge aufeinanderfolgender Zeichen der Datei, die die Datei darstellt, im Speicher für die Puffersteuerung befindet. Die zweite und dritte Konstruktionssyntaxe oben öffnen die Datei zum Lesen, aber die erste Syntax nicht. Das heißt. Das Objekt IFS kann mit der ersten Syntax mit der Anweisung aus der Ifstream -Klasse instanziiert werden:

ifstream ifs;

In diesem Fall wurde ein Dateiobjekt IFS erstellt, aber die Datei ist noch nicht geöffnet. Um die Datei zum Lesen zu öffnen, muss die Funktion der offenen Mitglieds der Ifstream -Klasse verwendet werden. Die Open () überlasteten Methoden, die üblicherweise von angelsächsischen (einschließlich westeuropäischen) Programmierern verwendet werden, sind:

void open (const char* s, ios_base :: openMode modus = ios_base :: in);
void open (const string & s, ios_base :: openMode modus = ios_base :: in);

Beachten Sie, dass die Konstruktionsanweisung „Ifstream ifs“; Erwähnt keine Datei in der Festplatte. Und so haben die ersten und zweiten Argumente dieser Open () -Mitglied -Funktionen die gleichen Bedeutungen wie die für die zweite und dritte Konstruktionssyntaxe oben.

Illustration

Die Verwendung der ersten Open () -Mitglied -Funktion hier (in diesem Abschnitt) kann wie folgt veranschaulicht werden:

ifstream ifs;
const char* str = "dir1/txtfile.txt";
Ifs.open (str, ios_base :: in);

Die Verwendung der zweiten Open () -Mitglied -Funktion hier (in diesem Abschnitt) kann wie folgt veranschaulicht werden:

ifstream ifs;
String str = "Dir1/txtfile.txt";
Ifs.open (str, ios_base :: in);

Der Unterschied in den beiden Codesegmenten ist die Art und Weise, wie die Zeichenfolge für den Pfad und den Dateinamen konstruiert werden.

Wurde die Datei geöffnet?

Eine Datei soll geöffnet werden, wenn eine Folge aufeinanderfolgender Zeichen der Datei, die die Datei darstellt, im Speicher für die Puffersteuerung befindet. Was ist, wenn der Pfad und/oder der Dateiname falsch waren?? Was wäre, wenn die Datei nicht geöffnet werden könnte, weil die Festplatte schlecht war und ihre Sektoren nicht gelesen werden konnten? Es ist ratsam zu überprüfen, ob die Datei mit der Syntax geöffnet wurde:

bool is_open () const;

is_open () ist eine Mitgliedsfunktion der Ifstream -Klasse. Es gibt wahr zurück, wenn die Datei erfolgreich geöffnet wurde und ansonsten falsch falsch ist. Das folgende Codesegment zeigt die Verwendung dieser Mitgliedsfunktion:

ifstream ifs;
const char* str = "dir1/txtfile.txt";
Ifs.open (str, ios_base :: in);
if (ifs.is_open () == true)
Cout << "File is opened." << endl;
anders
Cout << "File could not be open!" << endl;

Die Ausgabe sollte sein:

Die Datei wird geöffnet.

Eine Datei schließen

Eine Datei sollte geschlossen werden, nachdem sie geöffnet wurde. Die Schließaktion stoppt den Puffer im Speicher und befreit den Speicherplatz für andere Aktivitäten. Es bricht auch anmutig die Verbindung, die sie mit der Datei in der Festplatte hergestellt hat. IfStream hat die Mitgliedsfunktion Close (), um eine geöffnete Datei zu schließen. Die Syntax ist:

void close ();

Das folgende Codesegment zeigt die Verwendung:

ifstream ifs = ifStream ("Dir1/txtfile.txt ", ios_base :: in);
if (ifs.is_open () == true)
/* Machen Sie hier etwas mit der geöffneten Datei. */
Ifs.schließen();
Cout << "Opened File has been closed." << endl;

anders
Cout << "File could not be open!" << endl;

Die Ausgabe ist:

Die geöffnete Datei wurde geschlossen.

Die Datei sollte verwendet werden, wenn der Programmierer sicher ist, dass sie geöffnet und danach geschlossen wurde.

Lesen von Charakteren einzeln

IfStream hat eine Mitgliedsfunktion, deren Syntax lautet:

Basic_istream& get (char_type & c);

Wenn es den nächsten Charakter erhält, wird es in die Variable C gesteckt und gibt das von Basic_istream geerbte Objekt des Ifstream zurück. Der interne Zeiger von Ifstream verweist dann auf den nächsten Charakter für die nächste Lesung. Wenn das Dateiende erreicht ist, wird das zurückgegebene Objekt in False konvertiert.

Das folgende Codesegment liest alle Zeichen in der Datei von eins und sendet jeweils an das Terminal (Konsole):

Char C;
while (ifs.Holen Sie sich (c))
Cout << c;

C muss zuerst deklariert werden. C ist das Argument von Get (), bei dem es sich um eine Mitgliedsfunktion des Ifstream -Objekts handelt. Die einzige einfache Aussage (Cout << c;) of the while compound statement sends a copy of the character to the output.

Anstatt die Zeichen an die Ausgabe zu senden, können sie an ein String -Objekt gesendet werden und bilden eine lange Zeichenfolge wie folgt:

Char C;
String str;
while (ifs.Holen Sie sich (c))
str.push_back (c);

In diesem Fall muss der String -Header (Bibliothek) in das Programm aufgenommen werden.

Das folgende Programm liest alle Inhalte einer Datei und zeigt sie an:

#enthalten
#enthalten
#enthalten
Verwenden von Namespace STD;
int main ()

ifstream ifs = ifStream ("Dir1/txtfile.txt ", ios_base :: in);
if (ifs.is_open () == true)
Char C;
String str;
while (ifs.Holen Sie sich (c))
str.push_back (c);
Cout << str<< endl;
Ifs.schließen();
Cout << "Opened File has been closed." << endl;

anders
Cout << "File could not be open!" << endl;
Rückkehr 0;

Abschluss

Die Ifstream -Klasse des Fstream -Header. Verwenden Sie eine der Syntaxen, um ein Ifstream -Objekt zu erstellen:

Basic_ifstream ();
explizite Basic_ifstream (const char* s, ios_base :: openMode modus = ios_base :: in);
explizite Basic_ifstream (const string & s, ios_base :: openMode modus = ios_base :: in);

Wenn die erste Syntax verwendet wird, muss das Objekt weiterhin geöffnet werden, wobei eine der folgenden Mitgliederfunktionssyntaxe:

void open (const char* s, ios_base :: openMode modus = ios_base :: in);
void open (const string & s, ios_base :: openMode modus = ios_base :: in);

Um zu wissen, ob eine Datei erfolgreich geöffnet wird, verwenden Sie die Mitgliedsfunktionssyntax:

bool is_open () const;

Das Ifstream -Objekt muss nach dem Gebrauch geschlossen werden.

Um die Zeichen einzeln zu lesen, verwenden Sie die Mitgliedsfunktionssyntax in einer Weile-Loop:

Basic_istream& get (char_type & c);