Datei-Zugriff: Wahlfreier Zugriff
Bei den bisher vorgestellten Zugriffsarten auf Dateien hatte man keinen
Einfluß darauf, an welche Stelle beim Lesen bzw. Schreiben aus bzw.
in Dateien positioniert wird; es handelte sich um ein sequentielles Zugreifen
auf die Daten der Dateien. Das sequentielle Abarbeiten von Dateien führt jedoch
dazu, daß man
etwa zum Einlesen eines bestimmten Datensatzes aus einer Datei alle vorherigen Daten, an
denen man gar nicht interessiert ist, ebenfalls einlesen muß.
Beim Schreiben
hatte man nur die Möglichkeit, neue Daten ans Ende einer bereits existierenden
Datei einzufügen bzw. die alte Datei beim Schreibzugriff zu löschen
Insbesondere bei der Verwaltung von Datensätzen wäre es daher
wünschenswert,
wenn man eine Möglichkeit zum direkten Positionieren in einer Datei
hätte.
Neben dem sequentiellen Bearbeiten von Dateien gibt es auch in C++ die
Möglichkeit, direkt an eine beliebige Stelle in einer Datei zu positionieren (auch
wahlfreier Zugriff genannt).
Alle iostream-Klassen stellen hierfür spezielle
Funktionen
bereit, die im
folgenden beschrieben werden.
Für die Positionierung stehen die beiden Funktionen seekg() und
seekp() zur Verfügung, wobei sowohl
- absolute Positionsangaben als auch
- relative Positionsangaben
möglich sind. Die Funktionen seekg()
wie auch seekp()
haben folgende Argumente:
typedef long streampos;
seekg( streampos pos, seek_dir dir = ios::beg );
An der Notation erkennt man bereits, daß das zweite Argument einen
Default-Wert besitzt. Wird nur ein Parameter angegeben, so handelt es sich um
eine absolute Positionierung.