Flagging die ios Flags in C ++

Wenn Sie eine Datei öffnen, durch den Bau entweder ein ofstream oder ifstream So können Sie die Art und Weise ändern, um die Datei zu liefern, was sind genannt Fahnen geöffnet. In der Computersprache ein Flagge ist einfach ein kleines Element, dessen Vorhandensein oder Fehlen der Präsenz einer Funktion sagt, wie etwas zu tun. Mit dem ofstream und ifstream Klassen, ist die betreffende Funktion der Konstruktor.

Eine Fahne sieht aus wie ios :: app wenn Sie mit einem Compiler, der nicht vollständig ANSI-kompatibel ist, oder sieht aus wie ios_base :: app wenn Sie mit einer, der ist voll ANSI-konform. Diese besondere Flagge bedeutet, dass Sie in eine Datei schreiben wollen, aber Sie wollen, um alle vorhandenen Daten anzuhängen, die bereits in einer Datei sein kann. Sie liefern diese Flagge als Argument des Konstruktors für ofstream, wie in einem der folgenden Beispiele:

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

Sie können sehen, dass die Flagge als zweiter Parameter an den Konstruktor hinzugefügt wird. Andere Flags gibt es neben App, und Sie können sie kombinieren, indem die Verwendung von oder Operator, |. Zum Beispiel ist eine Flagge ios :: nocreate (Die nicht in neueren Compiler enthalten).

Dieses bedeutet, # 147-nur die Datei zu öffnen, wenn es bereits vorhanden ist. # 148- Das heißt, nicht die Datei erstellen, wenn es nicht existiert. (Merken, ofstream erstellt eine Datei, wenn es nicht bereits vorhanden ist.) Wenn die Datei die geöffnet wird nicht existiert, fehl, und wenn Sie anrufen fehlschlagen, Sie werden ein zurück wahr.

Das ios :: nocreate Flagge ist praktisch mit ios :: app. Zusammen bedeuten diese Öffnen Sie eine vorhandene Datei und fügen Sie es. Das heißt, arbeiten die beiden zusammen nur, wenn die Datei bereits vorhanden ist, und der Anruf wird die Datei für eine Anfügevorgang öffnen. Wenn die Datei noch nicht vorhanden ist, wird die Datei nicht erstellt werden. Hier ist ein Beispielaufruf:

ofstream outfile ( "../ MyFile.txt", ios :: app | ios :: nocreate) -wenn (outfile.fail ()) {cout lt; lt; "Konnte die Datei nicht öffnen!" lt; lt; Endl-return 0-} outfile lt; lt; "Hallo" lt; lt; Endl-outfile.close () -

Ob MyFile.txt nicht vorhanden ist, wenn Sie diesen Code ausführen, erhalten Sie die Meldung Die Datei konnte nicht geöffnet werden! Aber falls MyFile.txt vorhanden ist, öffnet die Anwendung es fügt die Zeichenfolge Hallo ihm und schließlich schließt es.

Es stellt sich heraus, dass die nocreate Flagge ist in der neuen Standardbibliothek nicht verfügbar. Bummer. Daher funktioniert der Code nur dann, wenn Sie eine frühere Version der Bibliothek verwenden. Wenn Sie den Code :: Blocks Compiler verwenden, sehen Sie die folgende Fehlermeldung:

Fehler: 'nocreate' ist kein Mitglied von '-std :: ios'

Allerdings sollten Sie testen, ob Ihre speziellen Compiler eine Bibliothek enthält, die unterstützt ios :: nocreate. Ihr Compiler kann es trotzdem unterstützen, auch wenn es die neue Standard Library enthält. Als Alternative zu ios :: nocreate, Sie können in den folgenden Code (verwenden Sie FileOutput02 Beispiel):

ifstream infile ( "../ MyFile.txt") - if (infile.fail ()) {cout lt; lt; "Konnte die Datei nicht öffnen!" lt; lt; Endl-return 0-} infile.close () - ofstream outfile ( "../ MyFile.txt", ios :: app) -outfile lt; lt; "Hallo" lt; lt; Endl-outfile.close () -

In diesem Fall beginnen Sie, indem Sie versuchen, die Datei zum Lesen zu öffnen. Wenn die Datei nicht vorhanden ist, kann man nicht von ihm gelesen und der Code beendet mit einer Fehlermeldung. Wenn der Code aus der Datei lesen können, wieder öffnet die Datei zum Schreiben. Dies ist ein schwerfälliges Problem zu umgehen, aber es funktioniert.

Es folgt eine Liste der verfügbaren Flags. Zuerst sind hier die, die für ios, für den Fall, verwenden Sie einen Compiler, der nicht vollständig ANSI-kompatibel ist:

  • ios :: app: Dieses Flag bedeutet, dass Sie eine Datei und fügen Sie öffnen möchten.

  • ios :: inFügen Sie diese Option, wenn Sie aus einer Datei lesen möchten.

  • ios :: out: Fügen Sie diese Option, wenn Sie in eine Datei schreiben möchten.

  • ios :: trunc: Fügen Sie diese Option, wenn Sie vor dem Schreiben, um es den Inhalt der Datei zu tilgen wollen. Es ist das Gegenteil von anhängen, und es ist auch der Standard, wenn Sie nicht ausdrücklich enthalten ios :: app.

  • ios :: nocreate: Verwenden Sie dieses Flag, wenn Sie sicherstellen möchten, dass die Datei nicht erstellt werden, wenn es nicht vorhanden ist, was in der Datei nicht geöffnet werden.

  • ios :: noreplace: Dieses Flag ist das Gegenteil von nocreate. Verwenden Sie diese Option, wenn Sie nur eine neue Datei erstellt werden soll. Wenn Sie dieses Flag verwenden und die Datei bereits vorhanden ist, wird die Datei nicht geöffnet, und das Scheitern zurückkehren wahr.

ANSI-kompatiblen Compiler unterstützen nicht die ios :: noreplace Flagge entweder. In diesem Fall können Sie das Gegenteil von dem Update für den Einsatz ios: nocreate Flagge, wie hier gezeigt (und in der gefunden FileOutput03 Beispiel):

ifstream infile ( "../ MyFile.txt") - wenn {cout (infile.fail ()!) lt; lt; "Die Datei existiert bereits!" lt; lt; Endl-return 0-} infile.close () - ofstream outfile ( "../ MyFile.txt") - outfile lt; lt; "Hallo" lt; lt; Endl-outfile.close () -

In diesem Fall versucht der Code zum Öffnen der Datei zum Lesen. Wenn die Datei vorhanden ist, zeigt der Code eine Fehlermeldung aus und beendet das Programm. Andernfalls erstellt der Code eine neue Datei und schreibt sie.

Die folgenden Flags sind in einer complier, die absolut ANSI-konform ist!

  • ios :: ateVerwenden Sie diese Flagge am Ende der Datei zu gehen, nachdem Sie es öffnen. Normalerweise benutzen Sie diese Option, wenn Sie Daten in die Datei angehängt werden soll.

  • ios_base :: binary: Dieses Flag angeben, dass die Datei binäre Daten, die Sie öffnen halten wird - also Daten, die nicht von Zeichenketten darstellt.

  • ios_base :: in: Dieses Flag angeben, wenn Sie aus einer Datei lesen möchten.

  • ios_base :: outFügen Sie dieses Flag, wenn Sie in eine Datei schreiben möchten.

  • ios_base :: truncFügen Sie diese Option, wenn Sie vor dem Schreiben, um es den Inhalt einer Datei zu tilgen wollen.

  • ios_base :: appFügen Sie diese Option, wenn Sie auf die Datei angehängt werden soll. Es ist das Gegenteil von trunc - das heißt, die Informationen, die bereits in der Datei ist, wenn Sie öffnen es dort bleiben wird.

Warum brauchen Sie ein in Flag und ein aus Flagge? Es scheint, dass der Computer sollte wissen, ob Sie in einer Datei gerade schreiben oder davon zu lesen, abhängig (jeweils) ab, ob Sie verwenden ofstream oder ifstream. Die Antwort, warum Sie eine haben im Flagge und ein aus Flag ist, dass andere Klassen verfügbar sind neben ofstream und ifstream.

Die Compiler, die noch nicht vollständig den ANSI-Standard unterstützen, haben eine generische Klasse in ihren Bibliotheken genannt fstream. Die ANSI-kompatiblen Compiler haben in ihren Bibliotheken eine Template-Klasse genannt basic_filebuf und eine Klasse mit dem Namen filebuf. Wenn Sie diese Klassen verwenden, können Sie mit dem im und aus Fahnen.

Menü