Datei-Streams verwenden

Aus Appmethod Topics
Wechseln zu: Navigation, Suche

Nach oben zu Mit Dateien arbeiten


Die Klasse System.Classes.TFileStream ermöglicht es Anwendungen, Dateien auf einem Datenträger zu lesen und in eine solche Datei zu schreiben. Da Objekte vom Typ TFileStream Stream-Objekte sind, nutzen sie die allgemeinen Stream-Methoden. Mithilfe dieser Methoden können Daten aus einer Datei gelesen oder in eine Datei geschrieben sowie aus oder in andere Stream-Objekte kopiert werden und Werte von Komponenten gelesen und geschrieben werden. Einzelheiten über die Funktionen von Datei-Streams, die diese von Stream-Klassen erben, finden Sie im Abschnitt Streams verwenden.

Datei-Streams gestatten den Zugriff auf das Datei-Handle. Sie haben somit die Möglichkeit, Datei-Streams zusammen mit den globalen Dateizugriffsroutinen einzusetzen, die ein Handle benötigen.

Erstellen und Öffnen von Dateien über Datei-Streams

Um eine Datei zu erstellen bzw. zu öffnen und Zugriff auf das Handle für diese Datei zu erhalten, instantiieren Sie einfach ein TFileStream-Objekt. Dadurch können Sie die angegebene Datei öffnen oder erstellen und Methoden für Lese- und Schreiboperationen zur Verfügung stellen. Wenn die Datei nicht geöffnet werden kann, löst TFileStream eine Exception aus.

Object Pascal:

 constructor Create(const filename: string; Mode: Word);

C++:

 __fastcall TFileStream(const AnsiString FileName, Word Mode);

Der Parameter Mode gibt an, wie die Datei beim Erstellen des Datei-Streams geöffnet werden soll. Mode enthält den Öffnungsmodus und den Freigabemodus. Beide Werte werden mit einem logischen ODER verknüpft. Der Öffnungsmodus muss einer der folgenden Konstantenwerte sein:

Öffnungsmodus

Wert Bedeutung

fmCreate

Erstellt eine Datei mit dem angegebenen Namen. Ist eine Datei mit diesem Namen bereits vorhanden, wird die Datei zum Schreiben geöffnet.

fmOpenRead

Öffnet die Datei ausschließlich zum Lesen.

fmOpenWrite

Öffnet die Datei ausschließlich zum Schreiben. Beim Schreiben in die Datei wird der aktuelle Inhalt vollständig ersetzt.

fmOpenReadWrite

Öffnet die Datei zum Ändern des aktuellen Inhalts anstatt diesen zu ersetzen.


Als Freigabemodus muss einer der folgenden Werte mit den unten aufgeführten Beschränkungen angegeben sein:

Freigabemodus

Wert Bedeutung

fmShareCompat

Die Dateifreigabe ist mit der FCB-Öffnungsmethode kompatibel (nur VCL-Anwendungen).

Weitere Informationen zur FCB-Struktur (File Control Block) finden Sie unter The FCB Structure in der MSDN-Bibliothek.

fmShareExclusive

Andere Anwendungen können die Datei nicht öffnen.

fmShareDenyWrite

Andere Anwendungen können die Datei ausschließlich zum Lesen öffnen.

fmShareDenyRead

Andere Anwendungen können die Datei zum Schreiben, aber nicht zum Lesen öffnen (nur VCL-Anwendungen).

fmShareDenyNone

Andere Anwendungen können die Datei ohne Einschränkungen zum Lesen oder Schreiben öffnen.


Beachten Sie, dass es vom gewählten Öffnungsmodus abhängt, welche Freigabemodi verfügbar sind. Die folgende Tabelle enthält die Freigabemodi, die für die verschiedenen Öffnungsmodi zur Verfügung stehen.

Öffnungsmodi und verfügbare Freigabemodi

Öffnungsmodus fmShareCompat (VCL) fmShareExclusive fmShareDenyWrite fmShareDenyRead (VCL) fmShareDenyNone

fmOpenRead

Nicht verfügbar

Nicht verfügbar

Verfügbar

Nicht verfügbar

Verfügbar

fmOpenWrite

Verfügbar

Verfügbar

Nicht verfügbar

Verfügbar

Verfügbar

fmOpenReadWrite

Verfügbar

Verfügbar

Verfügbar

Verfügbar

Verfügbar


Die Konstanten für den Öffnungs- bzw. Freigabemodus sind in der Unit SysUtils definiert.

Verwenden des Datei-Handles

Durch Instantiieren von TFileStream können Sie auf das Datei-Handle zugreifen. Es wird in der Eigenschaft Handle gespeichert. Unter Windows ist Handle ein Windows-Datei-Handle. Handle ist schreibgeschützt und gibt den Modus an, in dem die Datei geöffnet wurde. Wenn Sie die Attribute des Datei-Handles ändern möchten, müssen Sie ein neues TFileStream-Objekt erstellen.

Einige Routinen zur Dateibearbeitung benötigen als Parameter ein Datei-Handle. Sobald Sie einen Datei-Stream erstellt haben, können Sie die Eigenschaft Handle jederzeit wie ein Datei-Handle verwenden. Beachten Sie jedoch, dass Datei-Streams das Datei-Handle schließen, wenn das Objekt freigegeben wird (im Unterschied zu Handle-Streams).

Siehe auch