バナーをクリックすれば目次に戻ります

Copyright 1999 Rogue Wave Software
Copyright 1999 Sun Microsystems, Inc.


RWFileManager

RWFileManager RWFile

形式

typedef long     RWoffset ;
typedef unsigned long   RWspace;  // (typically)
#include <rw/filemgr.h>
RWFileManager f("file.dat");

説明

このクラスは、ディスクファイル内の記憶領域の割り当ておよび解放を行います。これはフリーストア・マネージャ (ヒープ管理) に非常に似ています。ディスクファイル内の空き領域のリンクリストを保守しながら、この機能を実行します。


注 - このクラスは、公開基底クラスとしてのクラス RWFile を継承しているので、RWFile の公開メンバー関数はすべてこのクラスで使用できます。RWFile のメンバー関数は、以下の説明には含まれていません。
ファイルが RWFileManager によって管理されている場合、ファイルの割り当てられていない領域への読み書きは未定義になります。特に、割り当てられた領域の最後に上書きすることは、データの破壊をもたらす問題となっています。この問題を解決する方法の 1 つは、binaryStoreSize() を使用して、RWCollection を格納する領域を調べることです。ほとんどの場合、RWCollection の格納サイズは RWCollectable メソッドの recursiveStoreSize() を使用して調べます。

持続性

なし

公開コンストラクタ

RWFileManager(const char* filename, const char* mode = 0);

モード mode を使用してパス名 filename のファイルに対して RWFileManager を作成します。モードは標準 C ライブラリ関数 fopen() により指定されます。mode がゼロ (デフォルト) の場合、コンストラクタは指定されたファイル名で既存のファイルをオープンし、更新しようとします(モードは rb+)。これが不可能な場合、指定されたファイル名で新しいファイルをオープンしようとします (モードは wb+)。ファイルが存在し、空でなければ、コンストラクタは既存のファイルマネージャが含まれていることを仮定します。ファイルが存在して空の場合には RWExternalErr 型の例外を送出します。ファイルが存在しないか、既存のファイルが空の場合、コンストラクタは必要に応じてファイルをファイルの作成を試み、それを新しいファイルマネージャで初期化しようとします。結果として作成されるオブジェクトは関数 isValid() を使用して、有効性をチェックする必要があります。発生する可能性がある例外は RWFileErr です。

公開メンバー関数

RWoffset
allocate(RWspace s);

ファイル内に s バイト分、記憶領域を割り当て、その先頭までのオフセットを返します。一番最初の割り当ては "特別な" 割り当てとみなされ、その後いつでも関数 start() を使用して返すことができます。発生する可能性のある例外は RWFileErr 型です。

void
deallocate(RWoffset t);

オフセット t から始まる記憶領域の割り当てを解放します。この領域は allocate() を呼び出して割り当てたものでなければなりません。一番最初の割り当ては "特別な" 割り当てとみなされ、解放できません。発生する可能性のある例外は RWFileErr 型です。

RWoffset
endData();

ファイルの終端のオフセットを返します。

RWoffset
start();

最初に割り当てられた領域のオフセットを返します。全く空間が割り当てられていなければ、RWNIL を返します。この関数は普通、処理の "開始" に使用され、ファイル内にデータがどれだけ残っているかを検査します。