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();