Datei-Zugriff: Wahlfreier Zugriff (Spezielle Problemstellungen)

Datensätze ansteuern

Kommen wir auf das Problem zurück, bei dem man datensatzweise positionieren möchte. Will man z.B. von der aktuellen Position um genau einen Datensatz weiter nach vorne in der Datei springen, so kann man eine der beiden folgenden Möglichkeiten verwenden:

  // Ansteuern des Datensatzes über Neupositionierung
  datei.seekg(datei.tellg() + sizeof(Datensatz));

  // meist effizienter ist das relative Positionieren
  datei.seekg(sizeof(Datenatz), ios::cur);

Einlesen des Dateiendes

Wird das Dateiende gelesen, so wird das EOF-Flag gesetzt, womit der Stream in keinem korrekten Zustand mehr ist. Insbesondere kann der Stream auch nicht mehr weiterverwendet werden! Man kann zwar weiterhin positionieren in der Datei (etwa Zurücksetzen an den Dateinanfang), ein Zugriff auf die Daten des Streams ist aber nicht möglich.

Um also nach einer Neupositionierung wieder Daten einlesen zu können, muß das Zustandsflag zurückgesetzt werden, z.B. über

  datei.clear();