Programmieren in C ++ mit der Streams Bibliothek

Die ANSI-C ++ Standard Dokument gibt eine vollständige Bibliothek von Klassen, die Ströme und die allgemeine Eingabe / Ausgabe behandeln. Glücklicherweise sind die meisten der Klassen in der Standardbibliothek mit fast allen Compilern zur Zeit verfügbar.

Die richtige Header-Datei

Die Ströme Bibliothek enthält mehrere Klassen, die Ihr Leben viel einfacher machen. Es hat auch mehrere Klassen, die Ihr Leben komplizierter zu machen, vor allem, weil diese Hilfsklassen sind, die Sie wahrscheinlich selten verwenden. Hier sind zwei der häufigsten Klassen, die Sie verwenden möchten. (Und denken Sie daran: Diese Klassen in so ziemlich allen C ++ Implementierungen zur Verfügung stehen, ob die komplette Standard-Bibliothek vorhanden ist oder nicht.)

  • ifstream: Dies ist ein Strom Sie instanziiert, wenn Sie aus einer Datei lesen möchten.

  • ofstream: Dies ist ein Strom Sie instanziiert, wenn Sie in eine Datei schreiben möchten.

Bevor Sie die verwenden ifstream und ofstream Klassen, sind Sie die richtige Header-Datei. Dies ist, wo die Dinge hässlich. In den frühen Tagen von C ++, benutzten die Menschen die Header-Datei. Aber irgendwo in der Mitte der 1990er Jahre begannen die Menschen, die Standard Template Library mit (und in den späten 1990er Jahren die Standard C ++ Library), die beide die erforderlich Sie umfassen (ohne die .h Erweiterung).

Die Standard Template Library und die Standardbibliothek setzen alle ihre Klassen und Objekte im Inneren des std Namespace. Wenn Sie also ein Element aus der Streams Bibliothek verwenden möchten, müssen Sie entweder

  • Prepend seinen Namen mit std, wie in diesem Beispiel:

    std :: ofstream outfile ( "MyFile.txt") -
  • Fügen Sie ein Verwendung Richtlinie vor den Zeilen, in denen Sie die Stream-Klassen verwenden, wie in diesem Beispiel:

using namespace std-ofstream outfile ( "MyFile.txt") -

In der Standardeinstellung automatisch der GCC-Compiler erkennt die std Namensraum (es ist, als ob Sie eine Linie hatte using namespace STD- auch wenn Sie es nicht tun).

Wenn Sie einen Compiler andere als GCC verwenden, folgen Sie Ihren #einschließen Linien mit der Linie Verwendung namespacestd-. Dann können Sie alle Beispielcode eingeben, wie sie ist, einschließlich der Strom Beispiele, ohne dass zu setzen std :: vor jeder Klasse oder ein Objekt aus der Standard Library.

Das Öffnen einer Datei

Gehen Sie auf die Textverarbeitung, wählen Sie Datei-Öffnen, und geben Sie MyGreatChapter.doc.

Hoppla. Sie erhalten eine Fehlermeldung. Diese Datei existiert nicht.

Oh, das stimmt; Sie haben es noch nicht geschrieben. Stattdessen erstellen Sie ein neues Dokument in der Textverarbeitung, Typ 800 kühlen Seiten im Laufe der einen entspannten Abend, und dann (wenn du bist alles fertig), um die Datei zu speichern. Geben Sie ihm den Namen MyGreatChapter.doc. Und das Wort Prozessor heruntergefahren, Abhängen am Pool, prahlen an Ihre Freunde über die neuen Romane Sie schreiben, und zu Bett gehen.

Am nächsten Morgen, öffnen Sie das Dokument. Dieses Mal ist es vorhanden ist, so dass das Textverarbeitungsprogramm öffnet es und liest die Informationen.

Wie Sie sehen können, zwei Fragen stellen sich eine Datei beim Öffnen:

  • Erstellen Sie eine neue Datei

  • Öffnen Sie eine vorhandene Datei

Hier ist, wo das Leben ein wenig seltsam bekommt: Einige Betriebssysteme diese beiden Elemente als eine Einheit zu behandeln. Der Grund dafür ist, dass, wenn Sie eine neue Datei erstellen, in der Regel Sie sofort wollen es verwenden zu beginnen, was bedeutet, dass Sie eine neue Datei erstellen möchten und dann öffnen. Und so dass der Prozess eine Datei zu erzeugen oft eingebettet direkt in den Prozess eine Datei zu öffnen.

Und wenn Sie eine vorhandene Datei zu öffnen, die Sie schreiben wollen, haben Sie zwei Möglichkeiten:

  • Löschen Sie den aktuellen Contents schreiben dann auf die Datei.

  • Halten Sie die vorhandenen Inhalte und schreiben Sie Ihre Informationen an das Ende der Datei. Das nennt man Anfügen Informationen in einer Datei.

Das FileOutput01 Beispielcode zeigt Ihnen, wie eine brandneue Datei zu öffnen, einige Informationen, um es zu schreiben, und schließen Sie es dann. (Aber warten Sie, es gibt noch mehr: Diese Version funktioniert, ob Sie die neueren ANSI-kompatiblen Compiler oder die Älteren haben)

#einschließen #einschließen using namespace std-int main () {ofstream outfile ( "../ MyFile.txt") - outfile lt; lt; "Hallo" lt; lt; Endl-outfile.close () - Rückkehr 0-}

Die kurze Anwendung öffnet eine Datei namens MyFile.txt. (Das # 147 - .. / # 148- Teil des Dateipfad legt die Datei im Stammverzeichnis für das Beispiel, das die Chapter01-Ordner ist) Es tut dies durch Erstellen einer neuen Instanz von. ofstream, das ist eine Klasse für Schreiben in eine Datei.

Die nächste Codezeile schreibt die Zeichenfolge "Hallo" in die Datei. Es nutzt die Einfügeoperator, >>, genauso wie cout tut. Eigentlich, ofstream wird von der sehr Klasse abgeleitet, cout ist eine Instanz, und das bedeutet, so dass alle die Dinge, die Sie tun können, mit cout Sie können auch mit Dateien zu tun! Beeindruckend!

Wenn Sie auf die Datei fertig geschrieben, schließen Sie es durch die anruf schließen Member-Funktion. Das ist wichtig!

Wenn Sie eine vorhandene Datei öffnen möchten, und fügen Sie es, können Sie das Angebot etwas ändern. Alles, was Sie tun, ist es, die Argumente an den Konstruktor übergeben wie folgt ändern:

ofstream outfile ( "MyFile.txt", ios_base :: app) -

Das ios :: app Artikel ist eine Aufzählung innerhalb einer Klasse genannt ios, und das ios_base :: app Artikel ist eine Zusammenfassung in der Klasse aufgerufen ios_base.

Das ios Klasse ist die Basisklasse, von der die ofstream Klasse abgeleitet wird. Das ios Klasse dient auch als Basisklasse für ifstream, was für Dateien zu lesen.

Für neuere Compiler, die ios_base Klasse ist eine Basis für ofstream und ifstream. (Ein paar Klassen sind dazwischen. ofstream eine Template-Klasse aus einer Template-Klasse abgeleitet genannt basic_ofstream, die sich aus einer Template-Klasse abgeleitet wird aufgerufen basic_ios, die von der Klasse abgeleitet ist ios_base.)

Sie können auch aus einer vorhandenen Datei lesen. Dies funktioniert genauso wie die cin Objekt. Das FileRead01 Beispiel frühere Datei angezeigt und liest den String zurück in erstellt öffnet das. In diesem Beispiel wird das übergeordnete Verzeichnis wieder als gemeinsame Stelle zu erstellen, zu aktualisieren und zu lesen Dateien.

#einschließen #einschließen #einschließen using namespace std-int main () {string Wort-ifstream infile ( "../ MyFile.txt") - infile >> Wort cout lt; lt; Wort lt; lt; Endl-infile.close () - Rückkehr 0-}

Beim Ausführen dieser Anwendung die Zeichenfolge geschrieben früher in die Datei - "Hallo," - erscheint auf dem Bildschirm. Es funktionierte! Es lesen Sie die Zeichenfolge in der Datei!

Menü