![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
![]() ![]()
Zu erst gleich mal den Syntax von fseek...
Mit fseek können sie den Zeiger der Datei datei beliebig positionieren. Die Positionierung geben sie mittels offset und origin an. origin gibt den Bezugspunkt an von wo der Dateizeiger datei verschoben werden soll und offset gibt wie weit von diesem Bezugspunkt aus der Dateizeiger gesetzt werden soll. Für origin sind 3 symbolische Konstanten definiert...
Hierzu nun wieder ein kleines Beispiel wie fseek funktioniert....
Dies Programm dient nur zu Demonstration von fseek. Zuerst öffnen wir wieder wie gewohnt eine Datei. Falls es nicht gelingt wird eine Datei mit dem Namen "fehler.log" beschrieben. Falls dies auch nicht gelingt gibt es halt nur eine Meldung auf dem Bildschirm. Zuerst machen sie so lange eine Eingabe bis sie das Zeichen '*' eingeben. Die wird an die Datei falls vorhanden ans Ende gehängt oder falls nicht vorhanden erzeugt ("a+" - Modus). Dann setzten wir mittels...
...denn FILE - Zeiger quelle an den Anfang der Datei, da SEEK_SET ja als Anfang der Datei definiert ist. Wenn sie jetzt z.B. anstatt dieser eben gezeigten fseek - Eingabe......
...diese Eingabe gemacht hätten, wäre unser FILE - Zeiger um 10 Bytes vom Anfang der Datei nach vorne gerückt. Also 10 Zeichen vom Dateianfang entfernt. Anschließend wird die ganze Datei auf dem Bildschirm ausgegeben. Nun zeigt unser FILE - Zeiger auf das Ende der Datei. Nun wollen wir mittels....
...den FILE - Zeiger quelle um -10 Stellen von der aktuellen Position (SEEK_CUR) verschieben. Sie sehen das es auch möglich ist negative Werte für offset anzugeben. Also geben wir hier die 10 letzten Zeichen auf dem Bildschirm aus. Anschließend wollen wir das Programm interaktiver machen und eine Abfrage machen um wie viele Stellen wir unseren FILE - Zeiger quelle vom Anfang der Datei verschieben wollen. Anschließend setzen wir wieder mit fseek unseren FILE - Zeiger an dem Anfang der Datei um anschließend die von uns gewünschte Anzahl von Zeichen nach vorne zu rücken mittels...
Anschließend folgt noch eine Abfrage ob sie von der Stelle, wie viel sie den FILE - Zeiger nach vorne haben wollten, lesen oder schreiben wollen. Schreiben funktioniert bei diesem Programm nicht da wir unser Programm ja im Modus a+ geöffnet haben. Die Datei wird somit immer ans Ende der Datei gehängt. Aber das ist jetzt hier nicht so wichtig. Es geht hier lediglich um die Funktion fseek. Ganz so sicher ist dies Programm aber auch nicht, den was machen sie wenn folgende Eingabe machen...
Das würde heißen das sie vom Dateianfang aus um 10 Position den FILE - Zeiger nach hinten versetzten. Also außerhalb der Datei irgendwohin. Wenn sie daraus nur lesen ist es weniger schlimm. Aber wenn sie in diesem Bereich schreiben können ganz schön was anrichten. Für so ein Beispiel gibt es die Funktion....
Mit ftell können sie die Aktuelle Position ihres FILE - Zeigers testen. Falls dabei ein Fehler auftritt liefert die Funktion -1L zurück. Also einen Wert kleiner als 0. Hier nun das Beispiel dazu....
Wir haben bei diesem Programm mittels...
...unseren FILE - Zeiger auf einem undefinierten Speicherbereich gesetzt. Dies überprüfen wir mittels...
Wir testen ob die if - Abrage von ftell einen Wert kleiner als 0 zurückgibt. Wenn ja, ist in diesem Programm der Fall, wird die Fehlermeldung ausgegeben und das Programm abgebrochen. Sie sollten sich allgemein Angewöhnen in Programmen die sie schreiben möglichst viele Überprüfungen vorzunehmen. Außerdem können sie ftell ja auch noch anders einsetzten. Da ftell ja die Dateizeigerposition zurückliefert können sie auch prüfen wie groß eine Datei ist...
Mit fseek haben wir den FILE - Zeiger ans Ende der Datei gesetzt. Mit ftell fragen wir die aktuelle Position des FILE - Zeigers ab. Somit haben wir praktisch die Speichergröße der Datei.
...auch mit...
...machen. Beide Funktionen erfüllen den selben Zweck. Der Syntax von rewind lautet...
Ich glaube diese Funktion bedarf eigentlich keiner Erklärung mehr. Wenn sie wollen könne sie rewind ja in dem 1. Programm dieses Kapitels testen. Einfach alle...
...ersetzen durch...
![]() ![]() ![]() |