Datei-Zugriff: Wahlfreier Zugriff (Spezielle Problemstellungen)

Ermittlung der Anzahl der Bytes einer Datei (4/5)

Wo liegt unser neuerliches Problem?

Wiederum hat dieser Fehler seine Ursache darin, daß die Datei im Modus Anhängen geöffnet wurde. Wir lesen bei unserem Programm ja nicht nur die Zeichen ein, sondern schreiben auch die jeweiligen Anzahlen der pro Zeile aufgetretenen Bytes ans Ende der Datei.
Und hier liegt das Problem: Wenn wir zum ersten Mal den Wert von zaehler in die Datei schreiben, wird die Datei wieder ans Ende positioniert. Der folgende Aufruf von get() liest dann nur noch das Dateiende ein, so daß die while-Schleife wieder -- wie bereits bei unserem ersten Problem -- vorzeitig verlassen wird.

Das Problem kann wie folgt behoben werden: bevor man den Wert ans Dateiende schreibt, merkt man sich die aktuelle Leseposition in einer zusätzlichen Variablen. Nach dem Schreiben in die Datei kehrt man dann wieder an die ursprüngliche Position zurück:

  streampos gemerkt = datei.tellg();  // aktuelle Position merken
  datei << zaehler << ' ';            // Z„hlerstand in die Datei schreiben
  datei.seekg(gemerkt);               // auf alte Position zurcksetzen

Wird das Programm wie angegeben modifiziert, so ist zumindest die Ausgabe auf dem Bildschirm (cout) in Ordnung.