前のページ次のページ上に戻るホーム SophiaFramework 2.2
SFUFileStream
ファイルの読み書きを行うストリームです。
#include <SFUFileStream.hpp>
class SFUFileStream : public SFUStream;
typedef SFUFileStream&          SFUFileStreamRef;
typedef SFUFileStream*          SFUFileStreamPtr;
typedef SFUFileStream**         SFUFileStreamHandle;
typedef const SFUFileStream     ConstSFUFileStream;
typedef const SFUFileStream&    ConstSFUFileStreamRef;
typedef const SFUFileStream*    ConstSFUFileStreamPtr;
typedef const SFUFileStream**   ConstSFUFileStreamHandle;

継承図

SFUFileStream クラスの継承図

協調図

SFUFileStream クラスの協調図

解説

SFUFileStream クラスは、 BREW のファイルシステム上のファイルを読み書きするためのストリームです。

ファイルの読み込み/書き込みポインタ

ファイル入出力では、 読み込みポインタと書き込みポインタは同一のポインタになりますので、 別々に移動させることはできません。

バッファリング

BREW API でファイルシステムにアクセスするために使用する IFile インターフェイスでは、読み込みや書き込みの速度が 低速であることが知られています。 これは IFile の内部でバッファリングが適切に行われていないためだと考えられます。 IFile のこの弱点をカバーするために、 SFUFileStream では独自にバッファリングを行い、 IFile の読み書き関数を呼び出す回数を抑えています。

バッファリングに使用するバッファのサイズは、 ファイルを Open する前に、 SetBufferSize で設定します。 バッファ サイズは大きければ大きいほど高速になりますが、 それだけメモリを消費することになりますので、 バランスを考えてサイズを指定してください。 デフォルトでは 1KB のサイズになります。

特権レベルについて

SFUFileStream はファイルシステムへのアクセスを行いますので、 MIF ファイルの設定で特権レベルを指定しておく必要があります。 これを行わないと、 Open 関数が失敗します。

参照

SFUStream

メンバ

コンストラクタ/デストラクタ
public
SFUFileStream SFUFileStream クラスのコンストラクタです。
public
~SFUFileStream SFUFileStream クラスのデストラクタです。
パブリック関数
public
Available ストリームから読み込み可能なデータサイズを返します。
public
Close ファイルストリームをクローズします。
public
Exception (SFAException から継承) エラーコードを取得/設定します。
public
Flush バッファリングされているデータをファイルに書き込みます。
public
Get ファイルストリームからデータを読み込みます。
public
GetBufferSize バッファ サイズを取得します。
public
GetFile 内部で使用している IFile インターフェイスを取得します。
public
IsEOS ファイルストリームの読み取りポインタがストリームの終端に達しているかどうか判定します。
public
Open ファイルをオープンします。
public
Put ファイルストリームにデータを書き込みます。
public
Seek ストリームの読み込み/書き込みポインタを移動します。
public
SetBufferSize バッファ サイズを設定します。
public
Tell 現在のストリーム ポインタの位置を取得します。
public
operator<< (SFUStream から継承) ストリームのインサータ (書き込み演算子) です。
public
operator>> (SFUStream から継承) ストリームのエクストラクタ (読み取り演算子) です。
プロテクト関数
public
Exception (SFAException から継承) エラーコードを取得/設定します。
protected
endianbig (SFUStream から継承) 読み込みモード/書き込みモードのエンディアンをビッグエンディアンに設定します。
protected
endianlittle (SFUStream から継承) 読み込みモード/書き込みモードのエンディアンをリトルエンディアンに設定します。
protected
multi (SFUStream から継承) 任意のサイズのデータを読み書きします。
protected
offset (SFUStream から継承) ストリームの読み込み/書き込みポインタを指定された位置に移動します。
protected
seek (SFUStream から継承) ストリームの読み込み/書き込みポインタを指定された位置に移動します。
EndianEnum (SFUStream から継承) ストリームのエンディアン変換を表す定数です。
NO_ERROR (SFAException から継承) エラーがないことを表す定数です。
SeekEnum (SFUStream から継承) ストリームのシークモードを表す定数です。

SFUFileStream::SFUFileStream
SFUFileStream クラスのコンストラクタです。
[ public ]
SFUFileStream(Void);

解説

データメンバの初期化を行います。 エラー値が SFERR_NO_ERROR に設定されます。

使用例

下記の例では、ファイルストリームを作成しています。

SFUFileStream fstream;

SFUFileStream::~SFUFileStream
SFUFileStream クラスのデストラクタです。
[ public, virtual ]
~SFUFileStream(Void);

解説

ファイルがオープンされている場合は、自動的にクローズされます。

参照

SFUFileStream::Close


SFUFileStream::Available
ストリームから読み込み可能なデータサイズを返します。
[ public, virtual ]
UInt32 Available(Void);

解説

ストリームから読み込み可能なデータサイズを返します。 ファイルがオープンされていない場合は 0 を返します。 いかなる場合もエラー値は設定されません。

参照

SFUFileStream::IsEOS


SFUFileStream::Close
ファイルストリームをクローズします。
[ public ]
Void Close(Void);

解説

ファイルストリームをクローズします。 ファイルに保存されていないバッファリング データがあれば、それを書き出します。 内部で使用している IFile インスタンスや IFileMgr インスタンスを解放します。 また、バッファリングに使用したバッファを解放します。 エラー値を SFERR_NO_ERROR に設定します。

BREW アプレットがサスペンド状態に入る時は、 この Close 関数を呼び出して、 ファイルシステムのリソースを解放する必要があります。

参照

SFUFileStream::Open


SFUFileStream::Flush
バッファリングされているデータをファイルに書き込みます。
[ public ]
Void Flush(Void);

解説

バッファリングされているデータをファイルに書き込みます。 ファイルストリームへのデータ書き込みがされていない場合、 実際にファイルに書き込まれることはありません。

参照

SFUFileStream::Put


SFUFileStream::Get
ファイルストリームからデータを読み込みます。
[ public, virtual ]
UInt32 Get(
    VoidPtr ptr   // 書き込むデータのポインタ
    UInt32 size   // 書き込むデータサイズ
);

戻り値

  • ptr が NULL で size が 0 でない場合はエラー値 SFERR_INVALID_PARAM が設定されます。
  • ファイルがオープンされていない場合はエラー値 SFERR_STREAM_NOT_OPENED が設定されます。
  • 指定されたサイズのデータを読み取ることができない場合は、 エラー値 SFERR_STREAM_READ_FAILED を設定します。
  • 成功すると SFERR_NO_DATA を設定します。

解説

ファイルストリームからバッファリングされているデータを読み込みます。

エラーが発生した場合、読み取りポインタの位置が変化することはありません。 成功すると、読み取りポインタの位置が size だけ進みます。

参照

SFUFileStream::Put


SFUFileStream::GetBufferSize
バッファ サイズを取得します。
[ public ]
UInt32 GetBufferSize(Void);

参照

SFUFileStream::SetBufferSize


SFUFileStream::GetFile
内部で使用している IFile インターフェイスを取得します。
[ public ]
SFUBrewPtr<SFBFile>& GetFile(Void);

解説

ファイルストリームがオープンされていない場合は、 NULL を返します。


SFUFileStream::GetFileSize
現在のファイルサイズを取得します。

解説

現在のファイルサイズを取得します。 このサイズは、 現在バッファリングされているがファイルに書き込まれていないデータも含めたサイズであり、 必ずしも現時点のファイルシステム上のファイルサイズと一致するわけではありません。


SFUFileStream::IsEOS
ファイルストリームの読み取りポインタがストリームの終端に達しているかどうか判定します。
[ public, virtual ]
Bool IsEOS(Void);

解説

ストリームがオープンされていない場合は TRUE が返ります。 いかなる場合でも、エラー値は設定されません。

使用例

下記のコードでは、 ストリームの終端に達するまでデータを読み取っています。

while (! stream.IsEOS()) {
    Byte b;
    stream >> b;
    ....
}

参照

SFUFileStream::Available


SFUFileStream::Open
ファイルをオープンします。
[ public ]
SFCError Open(
    ConstACharPtr filename               // ファイル名
    AEEOpenFileMode mode = _OFM_CREATE   // オープンモード
);

引数

filename

ファイル名

mode

オープンモード。 以下のいずれかの値を指定します。

_OFM_READ (ファイルを読取専用にオープンします。新規作成はされません。)
_OFM_READWRITE (ファイルを読み書き用にオープンします。新規作成はされません。)
_OFM_CREATE (読み書き用のファイルを新規作成します。ファイルがすでに存在する場合はエラーになります。)

戻り値

設定されたエラー値を返します。

  • ファイルがすでにオープンされている場合はエラー値 SFERR_ALREADY_OPEN が設定されます。
  • ファイルのオープンに失敗した場合は IFILEMGR_GetLastError() で返される BREW のエラー値が設定されます。
  • それ以外のエラーの場合は SFERR_EFALIED が設定されます。
  • 指定されたサイズのバッファを確保できない場合は、 エラー値 SFERR_NO_MEMORY が設定されます。
  • 成功すると SFERR_NO_ERROR を返します。

解説

BREW の IFileMgr インターフェイスを使用して、ファイルをオープンします。

使用例

下記の例では、ファイルが存在する場合にはそれをオープンし、 存在しない場合にはファイルを作成してオープンしています。

ConstACharPtr fileName = "record.dat";

SFUFileStream fstream;
fstrea.SetBufferSize(512);

if (fstream.Open(fileName, _OFM_READWRITE, bufSize) != SFERR_NO_DATA) {
   fstream.Open(fileName, _OFM_CREATE, bufSize);
}

参照

SFUFileStream::SetBufferSize | SFUFileStream::Close


SFUFileStream::Put
ファイルストリームにデータを書き込みます。
[ public, virtual ]
UInt32 Put(
    ConstVoidPtr ptr   // 書き込むデータのポインタ
    UInt32 size        // 書き込むデータのサイズ
);

戻り値

成功すると実際に書き込まれたバイト数を返します。 失敗すると 0 が返ります。

解説

ファイルにデータを書き込みます。

  • ptr が NULL で size が 0 でない場合は、エラー値 SFERR_INVALID_PARAM が設定されます。
  • ファイルがオープンされていない場合は、エラー値 SFERR_STREAM_NOT_OPEN が設定されます。
  • 書き込みに失敗した場合はエラー値 SFERR_STREAM_WRITE_FAILED が設定されます。

参照

SFUFileStream::Get


SFUFileStream::Seek
ストリームの読み込み/書き込みポインタを移動します。
[ public, virtual ]
UInt32 Seek(
    SInt32 offset   // 移動オフセット
    SeekEnum dir    // 移動基準
    ModeEnum mode   // 読み込み/書き込みモード
);

引数

offset

移動量を表すオフセット値です。 負の値も指定できます。

dir

以下のいずれかの値を指定します。

SEEK_START (ストリームの開始位置からの移動)
SEEK_CURRENT (ストリームの現在位置からの移動)
SEEK_END (ストリームの終端位置からの移動)
mode

読み込み/書き込みモードを指定します。 ファイルストリームではこの引数は無視されます。 ファイルストリームでは読み込みポインタと書き込みポインタを別々に移動することはできません。

戻り値

新しい位置を返します。 失敗した場合は UInt32(-1) を返します。

解説

  • 無効な位置が指定された場合は、エラー値 SFERR_INVALID_PARAM が設定されます。
  • ファイルがオープンされていない場合は、エラー値 SFERR_STREAM_NOT_OPEN が設定されます。
  • その他の理由で失敗した場合は、エラー値 SFERR_FAILED が設定されます。
  • ポインタの移動に成功すると、エラー値 SFERR_NO_ERROR が設定されます。

参照

SFUStream::Tell


SFUFileStream::SetBufferSize
バッファ サイズを設定します。
[ public ]
Void SetBufferSize(
    UInt32 size   // サイズ
);

解説

この関数で設定されたバッファ サイズは Open を呼び出したときに使用されます。 すでにオープンされている場合、 既存のバッファのサイズは変更されません。

参照

SFUFileStream::GetBufferSize


SFUFileStream::Tell
現在のストリーム ポインタの位置を取得します。
[ public, virtual ]
UInt32 Tell(
    ModeEnum mode   // 読み込み/書き込みモード
);

引数

mode

ファイルストリームの場合は、この引数は無視されます。

戻り値

成功すると、現在のストリーム ポインタの位置を返します。 失敗すると UInt32(-1) を返します。

解説

  • ファイルがオープンされていない場合はエラー値 SFERR_STREAM_NOT_OPEN が設定されます。
  • 成功するとエラー値 SFERR_NO_ERROR が設定されます。

参照

SFUFileStream::Seek