next up previous
Nächste Seite: Erkennen des Dateiendes bei Aufwärts: Bibliotheksmoduln Vorherige Seite: FileNames

FileSystem

Das Standardmodul FileSystem bietet Prozeduren zur Dateibehandlung an. Es ermöglicht sowohl den sequentiellen (``sequential access``) wie auch den wahlweisen Zugriff (``random access``) auf Dateien. Lese- und Schreiboperationen können beliebig gemischt werden. Dateien, die Sie mit dem Modul FileSystem bearbeiten, werden beim Programmabsturz oder -ende noch auf dem Dateisystem vervollständigt und geschlossen.

Die Anzahl der gleichzeitig verwendbaren Dateien ist nur durch das Betriebssystem beschränkt. Im Gegensatz zu AmigaDOS ist der Dateizugriff durch das Modul FileSystem gepuffert. Dies kann den Zugriff bis zu Faktor 10 verschnellern. Die Puffergrösse muss beim Eröffnen der Datei festgelegt werden.

Eine Datei wird mit dem strukturierten Typ File identifiziert. Für den Anwender sind davon jedoch nur die Felder res und eof von Bedeutung. Das Feld res enthält das Resultat der zuletzt ausgeführten Dateimanipulation, während eof das Dateiende anzeigt. Das Resultatsfeld sollte nach jedem Aufruf einer Prozedur aus FileSystem kontrolliert werden, die Prüfung auf das Dateiende muss nur nach Lesezugriffen erfolgen. Die verbleibenden Felder verwalten den Puffer und stellen die Verbindung zu AmigaDOS her.

Der Aufzählungstyp Response enthält die möglichen Zustände, die nach einem Dateizugriff auftreten können. Im Normalfall enthält das Feld res den Wert done. Dies bedeutet, dass die letzte Operation erfolgreich ausgeführt wurde. Nebst der allgemeinen Fehlermeldung notDone enthält der Typ Response einige AmigaDOS-spezifische Meldungen.

Um die Behandlung von Fehlersituationen zu vereinfachen gilt folgende Regel: Alle Prozeduren ausser Lookup und Close versuchen die Operation nur auszuführen, falls das Feld res gleich dem Wert done ist. So ist es möglich, eine Datei vollständig zu lesen oder zu schreiben, ohne jedes Mal auf einen Fehler testen zu müssen. Die Prozeduren Lookup und Close sind aus folgenden Gründen ausgenommen:

Es dürfen keine Operationen ausser Lookup auf nichtinitialisierte Filevariablen ausgeführt werden.


\begin{example}
\\ VAR
\\ f: file; ch: CHAR;
\\ BEGIN
\\ Lookup(f, '{\cmsltt{} D...
... END;
\\ (* Close auf jeden Fall aufrufen *)
\\ Close(f)
\\ END
\\ \end{example}

Mit der Prozedur Lookup wird ein Datei zum Lesen und/oder Schreiben eröffnet. Der Parameter name enthält den Namen der zu eröffnenden Datei. Mit new können Sie angeben, ob Sie eine neue oder bestehende Datei eröffnen möchten. Hat new den Wert TRUE und es existiert eine Datei mit dem angegebenen Namen, so wird diese beim Eröffnen gelöscht. Die Filevariable wird dem Ausgang der Operation entsprechend mit Werten belegt.

Die Daten einer Datei werden zwischengespeichert. So resultieren mehrere Lesebefehle mit nur einem auf der Datei. Analog dazu werden Schreibbefehle erst dann auf dem Dateisystem ausgeführt, wenn der zur Pufferung verwendete Puffer überlaufen würde. Die Grösse des verwendeten Puffers wird beim Lookup-Befehl mit dem Parameter buffer gesteuert. Wird keine Pufferung gewünscht, kann dafür auch 0 übergeben werden.

Close schliesst eine zuvor mit Lookup eröffnete Datei. Noch im Puffer verbliebene Daten werden vorher noch auf die Datei geschrieben.

Delete löscht die angegebene Datei. Damit der Parameter initialisiert ist, muss die Datei zuerst geöffnet werden.

Mit SetPos kann an eine beliebige Position innerhalb der Datei gesprungen werden. Es kann nicht über das aktuelle Dateiende positioniert werden; ein solcher Aufruf führt zu einem Fehler. Nach einem Fehler ist der Zustand einer Filevariablen undefiniert. Es ist im allgemeinen nicht möglich, mit dieser Datei weiter zu arbeiten. Das Feld res darf nicht auf done zurückgesetzt werden.

GetPos gibt die aktuelle Position innerhalb der Datei zurück.

Length gibt die aktuelle Dateilänge zurück. Dies ist zugleich der höchste zulässige Wert, der bei SetPos verwendet werden darf.

ReadChar und WriteChar sind die Prozeduren zum Lesen und Schreiben einzelner Zeichen.

ReadByteBlock und WriteByteBlock sind Prozeduren, die vor allem dann ihren Einsatz finden, wenn beliebige Variablen eines strukturierten Typs gelesen oder geschrieben werden sollen.

ReadBytes und WriteBytes arbeiten ähnlich wie ReadByteBlock und WriteByteBlock. Der Datenbereich wird hier über die Adresse adr und die Längenangabe len angesprochen. Der Parameter actual gibt an, wieviele Byte gelesen beziehungsweise geschrieben werden konnten.



Unterabschnitte
next up previous
Nächste Seite: Erkennen des Dateiendes bei Aufwärts: Bibliotheksmoduln Vorherige Seite: FileNames
Claudio Nieder 2000-11-12