07.10.2013 Aufrufe

Vorlesungsskript - Hochschule Emden/Leer

Vorlesungsskript - Hochschule Emden/Leer

Vorlesungsskript - Hochschule Emden/Leer

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

c○ Prof. Dr. B. Bartning, HS <strong>Emden</strong>/<strong>Leer</strong> Rumpfskript ” Informatik I/II“ (WS/SS 2010/11) 148<br />

12.6 Umgang mit Binärdateien<br />

(12.60) Übb Als Erweiterung zu (Kap. 5.3), wo der Umgang mit Textdateien dargestellt wurde, werden<br />

diese Kenntnisse auf Binärdateien erweitert. Hier sind einige wichtige Besonderheiten<br />

zu beachten, insbesondere muss man die beiden Elementfunktionen write und read anwenden<br />

können (12.63, 12.64). Zum Überladen des Ausgabe- und Eingabeoperators wird die<br />

Ableitungshierachie dargestellt (12.62). Punkt (12.65) erläutert das Positionieren in Dateien<br />

(auch in Textdateien). Ein ausführliches Beispiel (12.66) rundet das Unterkapitel ab. Wenn<br />

man Dateien auf andere Plattformen portieren möchte, ist zudem es wichtig, diesbezügliche<br />

Unterschiede zwischen Text- und Binärdateien zu kennen (12.67).<br />

(12.61) Binärdateien<br />

Beim Umgang mit Dateien muss man zwei Arten Dateien unterscheiden: Textdateien und<br />

Binärdateien. Der Unterschied ist bereits in (5.31) erläutert worden.<br />

Der Umgang mit Textdateien ist in (Kap. 5.3) beschrieben. Hier in diesem Unterkapitel werden<br />

i. w. nur die Besonderheiten für Binärdateien betrachtet.<br />

Wie bei Textdateien geschieht der Umgang in drei Schritten:<br />

• Öffnen der Datei,<br />

• Schreiben und/oder Lesen,<br />

• Schließen der Datei.<br />

(a) Das Öffnen (d. h. Eröffnen des Zugangs zur Datei implizit über das Betriebssystem) geschieht<br />

genau so wie bei Textdateien (5.33), jedoch muss hierbei unbedingt der Modus Binärzugang<br />

(ios::binary) angegeben werden. Da durch die Angabe des Modus die Standardvorgaben<br />

gelöscht werden, sollte die Art des Dateizugriffs (ios::out schreibend, ios::in<br />

lesend) zusätzlich angegeben werden. Die Verknüpfung geschieht über den Operator ” |“<br />

Op12.<br />

Öffnen zum Schreiben (die Streamobjektnamen sind nach C ++-Konvention für Variablennamen<br />

wählbar):<br />

ofstream SchreibStreamName;<br />

SchreibStreamName.open(DateiName,ios::binary|ios::out);<br />

oder (beides in einer Anweisung):<br />

ofstream SchreibStreamName(DateiName,ios::binary|ios::out);<br />

Öffnen zum Lesen:<br />

ifstream LeseStreamName;<br />

LeseStreamName.open(DateiName,ios::binary|ios::in);<br />

oder (beides in einer Anweisung):<br />

ifstream LeseStreamName(DateiName,ios::binary|ios::in);<br />

Weitere Modi und sonstige Informationen, z. B. Lesen und Schreiben gemischt, siehe in<br />

(5.33b).<br />

(b) Zum Schreiben oder Lesen können nicht die üblichen Elementfunktionen genommen werden.<br />

Der Ausgabeoperator > können nur dann benutzt werden,<br />

wenn sie passend überladen sind (11.23c). Dazu ist die Kenntnis der Ableitungshierarchie der<br />

Streams sinnvoll; sie ist im Folgepunkt (12.62) kurz beschrieben.<br />

Am sinnvollsten ist die Benutzung der Elementfunktionen write und read. Näheres ist in<br />

den beiden Punkten (12.63) und (12.64) beschrieben.<br />

(c) Das Schließen (Beenden des Zugriffs mit impliziter Signalisierung an das Betriebssystem,<br />

dass Abschlussarbeiten möglich sind) geschieht wie bei Textdateien mit der Elementfunktion<br />

close (5.34). Implizit wird ein Stream auch durch seinen Destruktoraufruf geschlossen. Sie<br />

sollten sich jedoch angewöhnen, einen Stream explizit zu schließen, sobald der Dateizugriff<br />

nicht mehr benötigt wird.<br />

(12.62) Im folgenden ist die Vererbungshierarchie der Streams abgebildet. Gemäß UML (2.14b ↑↑)<br />

zeigt das hohle Dreieck jeweils auf die Oberklasse(n). Die Hierarchie ist in Wirklichkeit –<br />

insbesondere in C++(neu) – wesentlich komplizierter. Daher ist hier nur ein kleiner Auszug<br />

beschrieben, der für das Selbstschreiben von Funktionen (z. B. Ausgabeoperator- und<br />

Eingabeoperator-Funktionen) hilfreich ist.

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!