Position im Stream und Stream-Größe angeben
Nach oben zu Streams verwenden
Neben den Schreib- und Lesemethoden besitzen Streams Methoden zum Aufsuchen einer bestimmten Position im Stream oder zum Ändern der Stream-Größe. Nach dem Aufsuchen einer bestimmten Position beginnen die nachfolgenden Schreib- bzw. Lesezugriffe an dieser Stelle.
Eine bestimmte Position aufsuchen
Die Methode Seek ist der gängigste Mechanismus zum Aufsuchen einer bestimmte Position im Stream. Es gibt zwei Überladungen für diese Methode:
function Seek(Offset: Longint; Origin: Word): Longint; function Seek(const Offset: Int64; Origin: TSeekOrigin): Int64;
virtual int __fastcall Seek(int Offset, Word Origin); virtual __int64 __fastcall Seek(const __int64 Offset, TSeekOrigin Origin);
Beide Überladungen arbeiten identisch. Der Unterschied ist, dass eine Version einen Integer-Wert mit 32 Bit zur Darstellung von Offsets und Positionen benutzt, während die andere einen 64-Bit-Wert verwendet.
Der Parameter Origin gibt an, wie der Parameter Offset interpretiert werden soll. Origin muss einen der folgenden Werte enthalten:
Werte für den Parameter Origin:
Wert | Bedeutung |
---|---|
soFromBeginning |
Offset wird ausgehend vom Beginn der Ressource ermittelt. Seek bewegt den Dateizeiger zur Position Offset. Offset muss >= 0 sein. |
soFromCurrent |
Offset bezieht sich auf die aktuelle Position in der Ressource. Seek verschiebt den Dateizeiger nach (Position + Offset). |
soFromEnd |
Offset wird ausgehend vom Ende der Ressource ermittelt. Offset muss <= 0 sein, um die Anzahl der Bytes vor dem Dateiende anzugeben. |
Seek setzt die aktuelle Position im Stream zurück, indem der Zeiger um den angegebenen Offset verschoben wird. Seek gibt die neue, aktuelle Position im Stream zurück.
Die Eigenschaften Position und Size verwenden
Alle Streams verfügen über Eigenschaften zur Speicherung der aktuellen Position sowie der Stream-Größe. Diese Eigenschaften werden sowohl von der Seek-Methode benutzt als auch von allen anderen Methoden, die Daten aus einem Stream lesen oder Daten hineinschreiben.
Die Eigenschaft Position dient der Angabe des aktuellen Offsets im Stream in Byte (ausgehend vom Beginn der Stream-Daten). Die Deklaration von Position lautet:
property Position: Int64;
__property __int64 Position = {read=GetPosition, write=SetPosition, nodefault};
Die Eigenschaft Size gibt die Größe des Streams in Byte an. Sie wird verwendet, um festzulegen, wie viele Bytes gelesen werden können, oder um Daten im Stream abzuschneiden. Die Deklaration von Size lautet:
property Size: Int64;
__property __int64 Size = {read=GetSize, write=SetSize64, nodefault};
Size wird intern von Routinen verwendet, die aus dem Stream lesen und in den Stream schreiben.
Durch eine Zuweisung an die Eigenschaft Size wird die Stream-Größe geändert. So setzt Size in einem Datei-Stream eine Dateiende-Marke, um die Datei abzuschneiden. Wenn die Eigenschaft Size nicht geändert werden kann, wird eine Exception ausgelöst. Dies ist beispielsweise der Fall, wenn Sie die Größe einer schreibgeschützten Datei ändern wollen.