ストリームの位置とサイズの指定

提供: Appmethod Topics
移動先: 案内検索

ストリームの使用 への移動


ストリームでは、読み書き用のメソッドが用意されているだけでなく、アプリケーションでストリームの読み書き位置を任意に移動したり、ストリームのサイズを変更できるようになっています。読み書き位置を指定の位置まで移動すると、次回の読み書き操作では、その位置からストリームに対する読み書きが開始されます。

特定のストリーム位置への移動

ストリーム内の特定の位置まで移動するための手段としては、Seek メソッドが最も一般的です。Seek メソッドには次の 2 つのオーバーロードがあります。

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);

どちらのオーバーロードも同じように動作します。両者の違いは、一方が 32 ビット整数を使用して位置とオフセットを表すのに対して、もう一方は 64 ビット整数を使用する点です。

Origin パラメータは Offset パラメータの解釈方法を示します。Origin の有効な値は以下のいずれかです。

Origin パラメータの値

意味

soFromBeginning

Offset はリソースの先頭からのオフセットになります。Seek を実行すると、Offset の位置まで移動します。Offset の値は 0 以上でなければなりません。

soFromCurrent

Offset はリソースの現在位置からのオフセットになります。Seek を実行すると、現在位置 + Offset の位置まで移動します。

soFromEnd

Offset はリソースの末尾からのオフセットになります。Offset は 0 以下でなければなりません。ファイル終端より前のバイト数を示します。


Seek は現在のストリーム位置を指定のオフセット分だけ移動して、再設定します。Seek はストリーム内の新しい現在位置を返します。

Position プロパティと Size プロパティの使用

すべてのストリームには、ストリームの現在の位置とサイズを保持するプロパティがあります。これらは、Seek メソッドのほか、ストリームに対して読み書きを行うすべてのメソッドで使用されます。

Position プロパティは、(ストリーム データの先頭からの)現在のオフセットをバイト数で示します。Position の宣言は次のとおりです。

property Position: Int64;
__property __int64 Position = {read=GetPosition, write=SetPosition, nodefault};

Size プロパティは、ストリームのサイズをバイト数で示します。このプロパティは、読み取りに使用できるバイト数の決定やストリーム内のデータの切り詰めに使用することができます。Size の宣言は次のとおりです。

property Size: Int64;
__property __int64 Size = {read=GetSize, write=SetSize64, nodefault};

Size プロパティは、ストリームに対する読み書きを行うルーチンで内部的に使用されます。

Size プロパティを設定すると、ストリーム内のデータのサイズが変更されます。たとえば、ファイル ストリームに Size を設定すると、ファイル終端(EOF)マーカーが挿入されて、ファイルが切り詰められます。ストリームの Size を変更できない場合は、例外が発生します。たとえば、読み取り専用ファイル ストリームの Size を変更しようとすると、例外が発生します。

関連項目