ストリームの位置とサイズの指定
ストリームの使用 への移動
RTL の利用:インデックス への移動
ストリームは,読み書き用のメソッドを提供することに加えて,アプリケーションがストリーム内の任意の位置を検索したり,ストリームのサイズを変更できるようにします。特定の位置を検索すると,次の読み書き操作ではその位置からストリームの読み書きを始めます。
特定の位置を検索する
ストリーム内の特定の位置に移動する方法としては,Seek メソッドが最も一般的なメカニズムです。Seek メソッドには次の 2 つのオーバーロードがあります。
function Seek(Offset: Longint; Origin: Word): Longint; function Seek(const Offset: Int64; Origin: TSeekOrigin): Int64;
どちらのオーバーロードも同じように機能します。両者の違いは,一方が 32 ビット整数を使って位置とオフセットを表すのに対して,もう一方は 64 ビット整数を使用する点です。
Origin パラメータは Offset パラメータの解釈の方法を示します。Origin に指定できる値は以下のとおりです。
Origin パラメータの値 :
| 値 | 意味 |
|---|---|
|
soFromBeginning |
Offset はリソースの始めを原点とする。Seek メソッドは位置を Offset に移動する。Offset >= 0 でなければならない |
|
soFromCurrent |
Offset はリソースの現在位置を原点とする。Seek は,Position + Offset に移動する |
|
soFromEnd |
Offset はリソースの終わりを原点とする。Offset <= 0 でなければならない。ファイル末尾からのバイト数をマイナスで示す |
Seek は,現在のストリーム位置を指定されたオフセット分だけ移動して,再設定します。Seek は,ストリーム内の新しい現在位置を返します。
Position プロパティと Size プロパティの使い方
どのストリームも,ストリームの現在位置とサイズを保持するプロパティがあります。Seek メソッドのほか,ストリームとの間で読み書きを行うすべてのメソッドが位置とサイズのプロパティを使用します。
Position プロパティは,ストリームデータの先頭からの現在のオフセットをバイト数で示します。Position の宣言は,次のようになります。
property Position: Int64;
Size プロパティは,ストリームのサイズをバイト数で示します。Size プロパティを使用すると,読み出しに使用できるバイト数を決定したり,ストリーム内のデータを切り捨てることができます。Size の宣言は,次のようになります。
property Size: Int64;
Size プロパティはストリームへのデータの書き込み,またはストリームからのデータの読み出しをするルーチンによって内部的に使用されます。
Size プロパティを設定すると,ストリーム内のデータのサイズが変更されます。たとえばファイルストリームで Size を設定すると,ファイルを切り詰めるための EOF マーカーが挿入されます。ストリームの Size が変更できない場合は,例外が生成されます。たとえば,読み取り専用ファイルストリームの Size を変更しようとすると,例外が生成されます。