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:

- `Lookup` kann keine definierten Werte in der `File`-Variablen erwarten, da erst der Aufruf dieser Prozedur die Variable mit gültigen Werten belegt.
- `Close` muss versuchen, eine Datei auch dann zu schliessen, wenn zuvor ein Fehler aufgetreten ist.

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

`
`

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

- Erkennen des Dateiendes bei Leseoperationen

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