SophiaFramework UNIVERSE 5.3 |
SFXFile クラスは、ファイルストレージを表すクラスです。 ファイルの作成や、ファイルへのデータの読み書き、 ファイル属性などの情報の取得、テンポラリファイルの作成などが行えます。
ファイルストレージへのデータの読み書きは、 SFXFile クラスを使用して以下の手順で行います。
■ SFXFile クラスの使用手順
ファイルのオープンモード | |
---|---|
ファイルのオープンモードには、読み込みモードと読み書きモードの 2 種類があります。 ファイル入力の場合は SFXFile::OpenReadOnly 関数を呼び出して 読み込みモードでファイルを開きます。 ファイル出力の場合は SFXFile::OpenReadWrite 関数を呼び出して読み書きモードでファイルを開きます。 |
ファイルポインタ | |
---|---|
SFXFile クラスは、読み書き用のファイルポインタを 1 つ持ちます。 SFXFile::Read / SFXFile::Write 関数は、 ポインタの位置からデータを読み込み / 書き込み、その分ファイルポインタを移動します。 SFXFile::Seek / SFXFile::SeekStart / SFXFile::SeekEnd 関数を呼び出してファイルポインタを移動することも可能です。 また、ストリームを利用して読み書きする場合も、 読み書きしたデータ量に応じてファイルポインタは移動します。 |
例 827. ファイルを読み込む方法
SFCError error; // エラー値 SFXFile file; // ファイル SFXAnsiStringStreamReader reader; // ファイル読み込み用ストリーム SFXAnsiString stringFromFile; // この変数にデータが読み込まれる SFXAnsiString tempString; // 読み込みモードでファイルを開く if ((error = file.OpenReadOnly(SFXPath("/dir1/data.txt"))) == SFERR_NO_ERROR) { // ファイル読み込み用ストリームを取得する // ※ size 引数を指定しているのでストリームバッファは固定長(バッファサイズ: 1024 バイト) if ((error = file.GetStreamReader(1024, &reader)) == SFERR_NO_ERROR) { while ((error == SFERR_NO_ERROR) && !reader.Ends()) { // ※ ファイルの終端に到達するまで以下の処理を繰り返す // フェッチを行う: ファイルからストリームバッファにデータを読み込む // ※ ストリームバッファは固定長(バッファサイズ: 1024 バイト)なので、1024 バイトまでのデータしか読み込まれない if ((error = reader.Fetch()) == SFERR_NO_ERROR) { // tempString にデータを読み込む if ((error = reader.ReadSFXAnsiString(&tempString)) == SFERR_NO_ERROR) { // データ読み込みに成功! // stringFromFile の末尾に tempString を加える stringFromFile += tempString; } } } // ファイル読み込み用ストリームを解放する reader.Release(); } file.Close(); } if (error != SFERR_NO_ERROR) { // エラーが発生したとき ... }
例 828. ファイルの書き込み
SFCError error; // エラー値 SFXFile file; // ファイル SFXAnsiStringStreamWriter writer; // ファイル書き込み用ストリーム SFXAnsiString string("abcdefghijklmnopqrstuvwxyz"); // 書き込むデータ ACharConstPtr _p = string.GetBuffer(); // 文字列を指すポインタ ACharConstPtr _endOfString = _p + string.GetLength(); // 文字列の末尾 SInt32 bufferSize = 1024; // 読み書きモードでファイルを開く if ((error = file.OpenReadWrite(SFXPath("/dir/data.txt"))) == SFERR_NO_ERROR) { // ファイル書き込み用ストリームを取得する // ※ size 引数を指定しているのでストリームバッファは固定長(バッファサイズ: 1024 バイト) if ((error = file.GetStreamWriter(bufferSize, &writer)) == SFERR_NO_ERROR) { // (書き込むデータのサイズ ÷ バッファサイズ + 1) 回繰り返す for (; (error == SFERR_NO_ERROR) && (_p < _endOfString) ; _p += bufferSize) { // バッファサイズよりも大きなデータは複数回 Flush 関数を呼び出して書き込む // 書き込む文字列のサイズ SInt32 size = (_endOfString - _p < bufferSize) ? _endOfString - _p : bufferSize; // _p が指す長さ size の文字列をストリームバッファに書き込む if ((error = writer.Write(_p, size)) == SFERR_NO_ERROR) { // ファイルに書き込む error = writer.Flush(); } } // ファイル書き込み用ストリームを解放する writer.Release(); } // ファイルを閉じる file.Close(); } if (error != SFERR_NO_ERROR) { // エラーが発生したとき ... }
ストレージ | SFXDirectory | SFXPath | ファイル操作
コンストラクタ/デストラクタ |
---|
SFXFile( Void ) SFXFile クラスのコンストラクタです。
|
SFXFile(
SInt32 cache
) SFXFile クラスのコンストラクタです。
|
~SFXFile( Void ) SFXFile クラスのデストラクタです。
|
パブリック関数 | |
---|---|
SFCError |
AsSFBAStream(
SFBAStreamSmpPtr result
) SFBAStream インスタンスに変換します。
|
SFCError |
AsSFBSource(
SFBSourceSmpPtr result
) SFBSource インスタンスに変換します。
|
Void |
Cancel( Void ) Read のスケジュールをキャンセルします。
|
Void |
Close( Void ) ファイルを閉じます。
|
static SFCError |
Create(
SFXPathConstRef path
, Bool force = false
) ファイルを作成します。
|
static SFCError |
DeviceFreeSpace(
UInt32Ptr result
) ファイルシステムの合計空き容量を取得します。[単位: バイト]
|
static SFCError |
DeviceTotalSpace(
UInt32Ptr result
) ファイルシステムの合計容量を取得します。[単位: バイト]
|
static SFCError |
Exists(
SFXPathConstRef path
, BoolPtr result
) ファイルが存在するか判定します。
|
SInt32 |
GetCacheSize( Void ) ファイル操作時のキャッシュサイズを取得します。[単位: バイト]
|
static SFCError |
GetCreateDate(
SFXPathConstRef path
, SFXDatePtr result
) ファイルの作成日時を取得します。
|
SFXPathConstRef |
GetFilePath( Void ) ファイルのパスを取得します。
|
SFBFileSmpConstRef |
GetSFBFile( Void ) 内部で管理する SFBFile インスタンスを取得します。
|
SFBFileMgrSmpConstRef |
GetSFBFileMgr( Void ) 内部で管理する SFBFileMgr インスタンスを取得します。
|
static SFCError |
GetSize(
SFXPathConstRef path
, UInt32Ptr result
) ファイルサイズを取得します。[単位: バイト]
|
SFCError |
GetStreamReader(
UInt32 size
, SFXStreamReaderPtr result
) ファイル読み込み用ストリームを取得します。
|
SFCError |
GetStreamReader(
SFXStreamReaderPtr result
) ファイル読み込み用ストリームを取得します。
|
SFCError |
GetStreamWriter(
UInt32 size
, SFXStreamWriterPtr result
) ファイル書き込み用ストリームを取得します。
|
SFCError |
GetStreamWriter(
SFXStreamWriterPtr result
) ファイル書き込み用ストリームを取得します。
|
static SFCError |
GetTemporaryPath(
SFXPathConstRef path
, SFXPathPtr result
) 既存のファイルパスと重複しないテンポラリファイルのパスを取得します。
|
static SFCError |
GetUniquePath(
SFXPathConstRef path
, SFXAnsiStringConstRef prefix
, SFXAnsiStringConstRef suffix
, SFXPathPtr result
) 既存のファイルパスと重複しないファイルパスを取得します。
|
static SFCError |
IsReadOnly(
SFXPathConstRef path
, BoolPtr result
) ファイルが読み込み専用であるか判定します。
|
static SFCError |
IsSystem(
SFXPathConstRef path
, BoolPtr result
) ファイルがシステムファイルであるか判定します。
|
SFCError |
OpenReadOnly(
SFXPathConstRef path
) ファイルを読み込みモードで開きます。
|
SFCError |
OpenReadWrite(
SFXPathConstRef path
, Bool force = false
) ファイルを読み書きモードで開きます。
|
SFCError |
Read(
VoidPtr buffer
, UInt32Ptr size
) Read(ストリームを使用しないファイルからのデータ読み込み)を行います。
|
static SFCError |
Remove(
SFXPathConstRef path
) ファイルを削除します。
|
static SFCError |
Rename(
SFXPathConstRef from
, SFXPathConstRef to
) ファイルパスを変更します。
|
SFCError |
ScheduleRead(
CallbackSPP spp
, VoidPtr reference
) Read(ストリームを使用しないファイルからのデータ読み込み)をスケジュールします。
|
SFCError |
ScheduleWrite(
CallbackSPP spp
, VoidPtr reference
) 【現在、この関数は使えません。】
|
SFCError |
Seek(
SInt32 distance
) 現在の位置から指定した移動量だけファイルポインタを移動します。
|
SFCError |
SeekEnd(
SInt32 distance
) ファイルの末尾から指定した移動量だけファイルポインタを移動します。
|
SFCError |
SeekStart(
SInt32 distance
) ファイルの先頭からファイルポインタを進めます。
|
Void |
SetCacheSize(
SInt32 size
) ファイル操作時のキャッシュサイズを設定します。
|
UInt32 |
Tell( Void ) 現在のファイルポインタの位置を取得します。
|
SFCError |
Truncate(
UInt32 position
) 指定した位置でファイルを切り捨てます。
|
SFCError |
Write(
VoidConstPtr buffer
, UInt32Ptr size
) Write します。
|
型 |
---|
CallbackSPP
(SFXStorage から継承)
ストレージクラスで使用するコールバック関数の型です。
|
[ public, explicit ] SFXFile(Void);
[ public, explicit ] SFXFile( SInt32 cache // ファイル操作時のキャッシュサイズ );
このコンストラクタでは、 cache 引数を指定すると、ファイル操作時のキャッシュサイズが設定されます。
これにより、ファイル操作のパフォーマンスをチューニングできます。
注意 | |
---|---|
cache 引数を指定した場合、 このコンストラクタは、内部で SFBFile::SetCacheSize 関数を呼び出します。 |
[ public, virtual ] ~SFXFile(Void);
[ public, virtual, const ] SFCError AsSFBAStream( SFBAStreamSmpPtr result // SFBAStream インスタンスへのポインタ );
SFBAStream インスタンスへのポインタを指定します。
この関数は、 このストレージが内部で管理する SFBFile インスタンスを SFBAStream インスタンスに変換します。
result 引数には、変換結果である SFBAStream インスタンスへのポインタが返ります。
注意 | |
---|---|
この関数により、 このストレージを SFBAStream インスタンスとして扱えます。 |
[ public, virtual, const ] SFCError AsSFBSource( SFBSourceSmpPtr result // SFBSource インスタンスへのポインタ );
SFBSource インスタンスへのポインタを指定します。
この関数は、 このストレージが内部で管理する SFBFile インスタンスを SFBSource インスタンスに変換します。
result 引数には、変換結果である SFBSource インスタンスへのポインタが返ります。
注意 | |
---|---|
この関数は、内部で BREW API の BREW API ISOURCEUTIL_SourceFromAStream 関数を呼び出します。 |
注意 | |
---|---|
この関数により、 このストレージを SFBSource インスタンスとして扱えます。 |
[ public, virtual ] Void Cancel(Void);
この関数は、 SFXFile::ScheduleRead 関数による Read(ストリームを使用しないファイルからのデータ読み込み)のスケジュールをキャンセルします。
具体的には、コールバック関数の登録をキャンセルします。
注意 | |
---|---|
この関数は、SFXFile::Close 関数から呼び出されます。 |
[ public ] Void Close(Void);
この関数は、このファイルを閉じます。
具体的には、 SFXFile::Cancel 関数を呼び出して Read(ストリームを使用しないファイルからのデータ読み込み)のスケジュールをキャンセルし、 内部で管理している SFBFile インスタンスを解放します。
注意 | |
---|---|
登録されていたコールバックはキャンセルされます。 |
注意 | |
---|---|
この関数は、SFXFile::~SFXFile デストラクタから呼び出されます。 |
Tip | |
---|---|
サスペンド時は、この関数を呼び出してリソースを解放します。 |
SFXFile file;
...
file.Close(); // ファイルを閉じる
SFXFile::Cancel | SFXFile::~SFXFile | SFXFile::Create | SFXFile::OpenReadWrite | SFXFile::OpenReadOnly | SFBFile
[ public, static ] SFCError Create( SFXPathConstRef path // 作成するファイルのパス Bool force = false // ディレクトリを再帰的に作成するかどうか );
この関数は、path 引数に指定したファイルを作成します。
引数 force を true にすると、指定したパスに存在しないディレクトリも作成します。
注意 | |
---|---|
この関数は、内部で SFBFileMgr::OpenFile 関数を呼び出します。 |
// ファイルを強制的に作成 // 親ディレクトリが存在しない場合は自動的に作成 SFXFile::Create(SFXPath("/dir1/data.txt"), true);
SFBFileMgr::OpenFile | SFXFile::OpenReadOnly | SFXFile::OpenReadWrite | SFXFile::Remove | BREW API IFILEMGR_OpenFile | BREW API IFILEMGR_GetLastError
この関数は、ファイルシステムの合計空き容量を取得します。
取得したファイルシステムの合計空き容量は、result 引数に返ります。[単位: バイト]
注意 | |
---|---|
この関数は、内部で SFBFileMgr::GetFreeSpace 関数を呼び出します。 |
注意 | |
---|---|
シミュレータでファイルシステムの合計空き容量が最大 32 ビット整数値よりも大きい場合は、 最大 32 ビット整数値 (0xFFFFFFFF) が返されます。 |
UInt32 space;
SFXFile::DeviceFreeSpace(&space); // space にファイルシステムの合計空き容量を取得する
SFBFileMgr::GetFreeSpace | SFXFile::DeviceTotalSpace | BREW API IFILE_IFILEMGR_GetFreeSpace | BREW API IFILEMGR_GetLastError
この関数は、ファイルシステムの合計容量を取得します。
取得した合計容量は、result 引数に返ります。[単位: バイト]
注意 | |
---|---|
この関数は、内部で SFBFileMgr::GetFreeSpace 関数を呼び出します。 |
注意 | |
---|---|
シミュレータでファイルシステムの合計容量が最大 32 ビット整数値よりも大きい場合は、 最大 32 ビット整数値 (0xFFFFFFFF) が返されます。 |
UInt32 space;
SFXFile::DeviceTotalSpace(&space); // space にファイルシステムの合計容量を取得する
SFBFileMgr::GetFreeSpace | SFXFile::DeviceFreeSpace | BREW API IFILE_IFILEMGR_GetFreeSpace | BREW API IFILEMGR_GetLastError
[ public, static ] SFCError Exists( SFXPathConstRef path // 存在を調べるファイルのパス BoolPtr result // 結果を受け取るポインタ );
この関数は、path 引数に指定したファイルが存在するか判定します。 判定結果は、result 引数に返ります。
注意 | |
---|---|
この関数は、内部で SFBFileMgr::Test 関数を呼び出します。 |
Bool b; // Exists 関数の戻り値はエラー値 SFXFile::Exists(SFXPath("/dir1/data.txt"), &b); if (b) { // ファイルが存在するとき ... }
[ public, const ] SInt32 GetCacheSize(Void);
ファイル操作時のキャッシュサイズ [単位: バイト]
この関数は、SFXFile::SetCacheSize 関数、 またはSFXFile::SFXFile コンストラクタで設定した、 ファイル操作時のキャッシュサイズを取得します。[単位: バイト]
[ public, static ] SFCError GetCreateDate( SFXPathConstRef path // ファイルのパス SFXDatePtr result // 作成日時を受け取るポインタ );
この関数は、path 引数に指定したファイルの作成日時を取得します。
取得したファイル作成日時は、result 引数に返ります。
注意 | |
---|---|
この関数は、内部で SFBFileMgr::GetInfo 関数を呼び出します。 |
SFXDate date;
// ファイルの作成日時を取得する
SFXFile::GetCreateDate(SFXPath("/dir1/data.txt"), &date);
[ public, const ] SFXPathConstRef GetFilePath(Void);
SFXFile file; SFXPath path("/data.txt"); // 1: TRACE("1: %s", file.GetFilePath().Get().GetCString()); if (file.OpenReadOnly(path) == SFERR_NO_ERROR) { // 2: /data.txt TRACE("2: %s", file.GetFilePath().Get().GetCString()); file.Close(); // 3: TRACE("3: %s", file.GetFilePath().Get().GetCString()); }
[ public, const ] SFBFileSmpConstRef GetSFBFile(Void);
このファイルが内部で管理する SFBFile インスタンス
この関数は、 このファイルが内部で管理する SFBFile インスタンスを取得します。
[ public, const ] SFBFileMgrSmpConstRef GetSFBFileMgr(Void);
このファイルが内部で管理する SFBFileMgr インスタンス
この関数は、 このファイルが内部で管理する SFBFileMgr インスタンスを取得します。
[ public, static ] SFCError GetSize( SFXPathConstRef path // ファイルのパス UInt32Ptr result // サイズを受け取るポインタ );
この関数は、path 引数に指定されたファイルのサイズを取得します。
取得したファイルサイズは、result 引数に返ります。[単位: バイト]
注意 | |
---|---|
この関数は、内部で SFBFileMgr::GetInfo 関数を呼び出します。 |
UInt32 size;
// ファイルサイズを取得する
SFXFile::GetSize(SFXPath("/dir1/data.txt"), &size);
[ public, virtual ] SFCError GetStreamReader( UInt32 size // バッファサイズ SFXStreamReaderPtr result // ファイル読み込み用ストリームへのポインタ );
[ public, virtual ] SFCError GetStreamReader( SFXStreamReaderPtr result // ファイル読み込み用ストリームへのポインタ );
この関数は、ファイル読み込み用ストリームを取得します。
size 引数を指定する場合、ストリームバッファは指定したサイズで固定です。 指定しない場合は、ストリームバッファは可変長になり、 内部的に SFXElasticStreamReader クラスが利用されます。
Tip | |
---|---|
ファイル読み込み用ストリームは、読み込むデータの種類に応じて SFXBinaryStreamReader、 SFXAnsiStringStreamReader、または SFXWideStringStreamReader クラスを使い分けます。 |
SFXFile file; SFXAnsiStringStreamReader reader; SFXAnsiString temp; SFXAnsiString string; // 読み出した文字列を格納する変数 SFXPath path("/data.txt"); // ファイル名 // ファイルを開く if (file.OpenReadOnly(path) == SFERR_NO_ERROR) { // ファイルのオープンに成功したとき // ファイル読み込み用ストリームを取得する(バッファサイズ: 1024 バイト) file.GetStreamReader(1024, &reader); // ファイルの終端まで繰り返す while (!reader.Ends()) { if (reader.GetReadableSize() == 0) { // ファイルからファイル読み込み用ストリームバッファへデータを読み込む reader.Fetch(); } // ファイル読み込み用ストリームバッファから temp へデータを読み込む reader >> temp; string += temp; } file.Close(); // ファイルを閉じる }
SFXFile::GetStreamWriter | SFXBinaryStreamReader | SFXAnsiStringStreamReader | SFXWideStringStreamReader | ストリームバッファ
[ public, virtual ] SFCError GetStreamWriter( UInt32 size // バッファサイズ SFXStreamWriterPtr result // ファイル書き込み用ストリームへのポインタ );
[ public, virtual ] SFCError GetStreamWriter( SFXStreamWriterPtr result // ファイル書き込み用ストリームへのポインタ );
この関数は、ファイル書き込み用ストリームを取得します。
size 引数を指定する場合、ストリームバッファは指定したサイズで固定です。 指定しない場合は、ストリームバッファは可変長になり、 内部的に SFXElasticStreamWriter クラスが利用されます。
Tip | |
---|---|
ファイル書き込み用ストリームは、書き込むデータの種類に応じて SFXBinaryStreamWriter、 SFXAnsiStringStreamWriter、または SFXWideStringStreamWriter クラスを使い分けます。 |
SFXFile file; SFXAnsiStringStreamWriter writer; SFXAnsiString string("abcdefg"); // 書き込む文字列 SFXPath path("/data.txt"); // ファイル名 // ファイルを開く if (file.OpenReadWrite(path) == SFERR_NO_ERROR) { // ファイルのオープンに成功したとき // ファイル書き込み用ストリームを取得する file.GetStreamWriter(string.GetLength(), &writer); // string からファイル書き込み用ストリームバッファへデータを書き込む writer << string; // ファイル書き込み用ストリームバッファからファイルへデータを書き込む writer.Flush(); file.Close(); // ファイルを閉じる }
SFXFile::GetStreamReader | SFXBinaryStreamWriter | SFXAnsiStringStreamWriter | SFXWideStringStreamWriter | ストリームバッファ
[ public, static ] SFCError GetTemporaryPath( SFXPathConstRef path // テンポラリファイルを作成するディレクトリのパス SFXPathPtr result // テンポラリファイルのパスを受け取るポインタ );
この関数は、既存のファイルパスと重複しないテンポラリファイルのパスを取得します。
注意 | |
---|---|
この関数は、内部的に接頭辞 "sfx" を prefix 引数に、 接尾辞 "fle.tmp" を suffix 引数に指定して SFXFile::GetUniquePath 関数を呼び出します。 |
SFXPath dir("/");
SFXPath path;
if (SFXFile::GetTemporaryPath(dir, &path) == SFERR_NO_ERROR) {
// "/sfx7182CBD4fle.tmp" のようなファイルパスが得られる
TRACE("Temporary File Path: %s", path.Get().GetCString());
}
[ public, static ] SFCError GetUniquePath( SFXPathConstRef path // ファイルを作成するディレクトリのパス SFXAnsiStringConstRef prefix // ファイル名のプレフィックス(接頭辞) SFXAnsiStringConstRef suffix // ファイル名のサフィックス(接尾辞) SFXPathPtr result // ファイルのパスを受け取るポインタ );
この関数は、既存のファイルパスと重複しないファイルパスを取得します。
注意 | |
---|---|
ファイル名は乱数によって生成されるため、 同じ名前のファイルパスが存在する場合、ファイルパスの取得に失敗します。 65 回以上連続で失敗した場合は、SFERR_FAILED エラーを返します。 |
Tip | |
---|---|
一時的なファイル(すぐに削除するファイル)の場合は、 SFXFile::GetTemporaryPath 関数を使います。 |
SFXPath dir("/");
SFXPath path;
if (SFXFile::GetUniquePath(dir, "sfx", ".dat", &path) == SFERR_NO_ERROR) {
// "/sfx7182CBD4.dat" のようなファイルパスが得られる
TRACE("%s", path.Get().GetCString());
}
[ public, static ] SFCError IsReadOnly( SFXPathConstRef path // 調べるファイルのパス BoolPtr result // 結果を受け取るポインタ );
この関数は、path 引数に指定されたファイルが読み込み専用であるか判定します。
判定結果は、result 引数に返ります。
注意 | |
---|---|
この関数は、内部で SFBFileMgr::GetInfo 関数を呼び出します。 |
Bool b; // IsReadOnly 関数の戻り値はエラー値 SFXFile::IsReadOnly(SFXPath("/dir1/data.txt"), &b); if (b) { // ファイルが読み込み専用の場合 ... }
SFBFileMgr::GetInfo | SFXFile::Exists | SFXFile::IsSystem | BREW API IFILEMGR_GetInfo | BREW API IFILEMGR_GetLastError
[ public, static ] SFCError IsSystem( SFXPathConstRef path // 調べるファイルのパス BoolPtr result // 結果を受け取るポインタ );
この関数は、path 引数に指定されたファイルがシステムファイルであるか判定します。
判定結果は、result 引数に返ります。
注意 | |
---|---|
この関数は、内部で SFBFileMgr::GetInfo 関数を呼び出します。 |
SFBFileMgr::GetInfo | SFXFile::Exists | SFXFile::IsReadOnly | BREW API IFILEMGR_GetInfo | BREW API IFILEMGR_GetLastError
[ public ] SFCError OpenReadOnly( SFXPathConstRef path // 開くファイルパス );
SFXFile file; // ファイルを読み込みモードで開く if (file.OpenReadOnly(SFXPath("/dir1/data.txt")) == SFERR_NO_ERROR) { ... // ファイルを閉じる file.Close(); }
SFBFileMgr::OpenFile | SFXFile::Create | SFXFile::OpenReadWrite | BREW API IFILEMGR_OpenFile | BREW API IFILEMGR_GetLastError
[ public ] SFCError OpenReadWrite( SFXPathConstRef path // 開くファイルのパス Bool force = false // ファイルが存在しない場合は作成するかどうか );
この関数は、引数に指定されたファイルを読み書きモードで開きます。
Tip | |
---|---|
force 引数に true を設定すると、 引数に指定されたファイルが存在しない場合、そのファイルを作成します。 |
注意 | |
---|---|
この関数は、内部で SFBFileMgr::OpenFile 関数を呼び出します。 |
SFXFile file; // ファイルを読み書きモードで開く if (file.OpenReadWrite(SFXPath("/dir1/data.txt")) == SFERR_NO_ERROR) { ... // ファイルを閉じる file.Close(); }
SFBFileMgr::OpenFile | SFXFile::Create | SFXFile::OpenReadOnly | BREW API IFILEMGR_OpenFile | BREW API IFILEMGR_GetLastError
[ public, virtual ] SFCError Read( VoidPtr buffer // データを読み込むバッファ UInt32Ptr size // 呼び出す前: データを読み込むバッファのサイズ。戻り値: 実際に読み込んだデータのサイズ );
データを読み込むバッファを指定します。
この関数を呼び出す時は、データを読み込むバッファのサイズを指定します。 この関数が戻ると、実際にバッファに読み込んだデータのサイズが格納されています。
この関数は、Read(ストリームを使用しないファイルからのデータ読み込み)を行います。
※ この関数が AEE_NET_WOULDBLOCK を返す場合、 SFXFile::ScheduleRead 関数でコールバック関数を登録し、 コールバック関数の中で再度この関数を呼び出して Read を行う必要があります。
注意 | |
---|---|
この関数は、 内部で SFBAStream::Read 関数を呼び出します。 |
前提条件 | |
---|---|
この関数を呼び出す前に、 SFXFile::OpenReadOnly / SFXFile::OpenReadWrite 関数を呼び出してファイルを開く必要があります 。 |
SFBAStream::Read | SFXFile::OpenReadOnly | SFXFile::OpenReadWrite | SFXFile::ScheduleRead | SFXFile::OpenReadOnly | SFXFile::OpenReadWrite | SFXFile::Seek | SFXFile::Write | BREW API IFILE_Read
[ public, static ] SFCError Remove( SFXPathConstRef path // 削除するファイルパス );
if (SFXFile::Remove(SFXPath("/dir/data.txt")) == SFERR_NO_ERROR) { ... }
SFBFileMgr::Remove | SFXFile::Create | SFXDirectory::Remove | BREW API IFILE_Remove | BREW API IFILEMGR_GetLastError
[ public, static ] SFCError Rename( SFXPathConstRef from // 変更前のファイルパス SFXPathConstRef to // 変更後のファイルパス );
以下は、dir1 ディレクトリにある data.txt を dir2 ディレクトリに移動するコードです。
if (SFXFile::Rename(SFXPath("/dir1/data.txt"), SFXPath("/dir2/data.txt")) == SFERR_NO_ERROR) { ... }
以下は、dir1 ディレクトリにある data.txt を file.txt に変更するコードです。
if (SFXFile::Rename(SFXPath("/dir1/data.txt"), SFXPath("/dir1/file.txt")) == SFERR_NO_ERROR) { ... }
[ public, virtual ] SFCError ScheduleRead( CallbackSPP spp // コールバック関数のポインタ VoidPtr reference // コールバック関数に渡すユーザーデータ );
この関数は、 Read(ストリームを使用しないファイルからのデータ読み込み)をスケジュールします。
具体的には、 SFXFile::Read 関数による Read を行うコールバック関数を登録します。 登録されたコールバック関数は、Read が可能になると BREW AEE により呼び出されます。
コールバック関数が呼び出されるまでは、「Read スケジュール中の状態」になります。 コールバック関数が呼び出されると、この関数を呼び出す直前の状態(ファイルが開いている状態)に戻ります。
コールバック関数が呼び出される前に、 SFXFile::Cancel 関数を呼び出すと、 Read(ストリームを使用しないファイルからのデータ読み込み)のスケジュールはキャンセルされ、 この関数を呼び出す直前の状態(ファイルが開いている状態)に戻ります。
なお、この関数の戻り値がエラー(SFERR_NO_ERROR 以外の値)の場合、コールバック関数は呼び出されません。
※ SFXFile::Read 関数の戻り値が AEE_STREAM_WOULDBLOCK である場合、 この関数を使用してコールバック関数を登録し、再び Read(ストリームを使用しないファイルからのデータ読み込み)を試みます。
注意 | |
---|---|
この関数は、 内部で SFBAStream::Readable 関数を呼び出します。 |
前提条件 | |
---|---|
この関数を呼び出す前に、 SFXFile::OpenReadOnly / SFXFile::OpenReadWrite 関数を呼び出してファイルを開く必要があります 。 また、既に Read がスケジュールされている場合は、SFERR_INVALID_STATE エラーが返ります。 |
class MyClass { SFXFile _file; Void Function(Void); XALLBACK_DECLARE_SFXFILE(OnRead) }; Void MyClass::Function(Void) { SFXPath path("/dir1/data.txt"); // ファイルを読み込みモードで開く if (_file.OpenReadOnly(path) == SFERR_NO_ERROR) { // Read(ファイルからのデータ読み込み) をスケジュールする: コールバック関数を登録する // ※ Read 可能になれば、OnRead コールバック関数が呼び出される _file.ScheduleRead(XALLBACK_INTERNAL(OnRead)); } } // Read 可能が通知されるコールバック関数 XALLBACK_IMPLEMENT_SFXFILE(MyClass, OnRead, error) { SFXBuffer buffer; UInt32 size; buffer.SetSize(32); // データを読み込むためのバッファを確保する size = buffer.GetSize(); // ファイルから buffer へデータを読み込む switch (_file.Read(buffer.GetBuffer(), &size)) { case SFERR_NO_ERROR: // 読み込んだデータを表示する buffer.SetSize(size + 1); buffer[buffer.GetSize() + 1] = '\0'; TRACE("%s", SFXAnsiString(buffer).GetCString()); // Read(ファイルからのデータ読み込み) をスケジュールする: コールバック関数を登録する // ※ Read 可能になれば、OnRead コールバック関数が呼び出される _file.ScheduleRead(XALLBACK_INTERNAL(OnRead)); break; case EFILEEOF: _file.Close(); // ファイルを閉じる break; case AEE_STREAM_WOULDBLOCK: // Read(ファイルからのデータ読み込み) をスケジュールする: コールバック関数を登録する // ※ Read 可能になれば、OnRead コールバック関数が呼び出される _file.ScheduleRead(XALLBACK_INTERNAL(OnRead)); break; } return; }
SFBAStream::Readable | SFXFile::Read | SFXFile::OpenReadOnly | SFXFile::OpenReadWrite | SFXFile::Cancel | BREW API IFILE_Readable
[ public, virtual ] SFCError ScheduleWrite( CallbackSPP spp // コールバック関数のポインタ VoidPtr reference // コールバック関数に渡すユーザーデータ );
SFERR_UNSUPPORTED
【現在、この関数は使えません。】
この関数は、 現在の位置から指定した移動量だけファイルポインタを移動します。
ファイルポインタを前方に移動する場合は、移動量(distance 引数)に負の値を指定します。
ファイルが読み込み専用モードで開いているとき、 移動後のファイルポインタの位置がファイルの先頭よりも前方または末尾よりも後方になる場合、この操作は失敗します。
ファイルが読み書きモードで開いているとき、 移動後のファイルポインタの位置がファイルの末尾を越える場合、ファイルはその位置まで拡張されます。 また、移動後のファイルポインタの位置がファイルの先頭よりも前になる場合は、この操作は失敗します。
注意 | |
---|---|
この関数は、 内部で SFBFile::Seek 関数を呼び出します。 |
前提条件 | |
---|---|
この関数を呼び出す前に、 SFXFile::OpenReadOnly / SFXFile::OpenReadWrite 関数を呼び出してファイルを開く必要があります 。 |
SFBFile::Seek | SFXFile::OpenReadOnly | SFXFile::OpenReadWrite | SFXFile::SeekStart | SFXFile::SeekEnd | SFXFile::Tell | BREW API IFILE_Seek | BREW API IFILEMGR_GetLastError
この関数は、 ファイルの末尾から指定した移動量だけファイルポインタを移動します。
ファイルポインタを前方に移動する場合は、移動量(distance 引数)に負の値を指定します。
ファイルが読み込み専用モードで開いているとき、 移動後のファイルポインタの位置がファイルの先頭よりも前方または末尾よりも後方になる場合、この操作は失敗します。
ファイルが読み書きモードで開いているとき、 移動後のファイルポインタの位置がファイルの末尾を越える場合、ファイルはその位置まで拡張されます。 また、移動後のファイルポインタの位置がファイルの先頭よりも前になる場合は、この操作は失敗します。
注意 | |
---|---|
この関数は、 内部で SFBFile::Seek 関数を呼び出します。 |
前提条件 | |
---|---|
この関数を呼び出す前に、 SFXFile::OpenReadOnly / SFXFile::OpenReadWrite 関数を呼び出してファイルを開く必要があります 。 |
SFBFile::Seek | SFXFile::OpenReadOnly | SFXFile::OpenReadWrite | SFXFile::Seek | SFXFile::SeekStart | SFXFile::Tell | BREW API IFILE_Seek | BREW API IFILEMGR_GetLastError
この関数は、 ファイルの先頭から指定した移動量だけファイルポインタを移動します。
ファイルポインタを前方に移動する場合は、移動量(distance 引数)に負の値を指定します。
ファイルが読み込み専用モードで開いているとき、 移動後のファイルポインタの位置がファイルの先頭よりも前方または末尾よりも後方になる場合、この操作は失敗します。
ファイルが読み書きモードで開いているとき、 移動後のファイルポインタの位置がファイルの末尾を越える場合、ファイルはその位置まで拡張されます。 また、移動後のファイルポインタの位置がファイルの先頭よりも前になる場合は、この操作は失敗します。
注意 | |
---|---|
この関数は、 内部で SFBFile::Seek 関数を呼び出します。 |
前提条件 | |
---|---|
この関数を呼び出す前に、 SFXFile::OpenReadOnly / SFXFile::OpenReadWrite 関数を呼び出してファイルを開く必要があります 。 |
SFBFile::Seek | SFXFile::OpenReadOnly | SFXFile::OpenReadWrite | SFXFile::Seek | SFXFile::SeekEnd | SFXFile::Tell | BREW API IFILE_Seek | BREW API IFILEMGR_GetLastError
この関数は、ファイル操作時のキャッシュサイズを設定します。
これにより、ファイル操作のパフォーマンスをチューニングできます。
注意 | |
---|---|
ファイル操作時のキャッシュサイズは、 SFXFile::SFXFile コンストラクタで設定することも可能です。 |
注意 | |
---|---|
この関数は、内部で SFBFile::SetCacheSize 関数を呼び出します。 |
[ public, const ] UInt32 Tell(Void);
// 現在の位置でファイルを切り詰める
file.Truncate(file.Tell());
// 現在の位置でファイルを切り捨てる
file.Truncate(file.Tell());
SFBFile::Truncate | SFXFile::Seek | SFXFile::SeekStart | SFXFile::SeekEnd | SFXFile::Tell | BREW API IFILE_Truncate | BREW API IFILEMGR_GetLastError
[ public, virtual ] SFCError Write( VoidConstPtr buffer // データを書き込むバッファ UInt32Ptr size // 呼び出す前: データを書き込むバッファのサイズ。戻り値: 実際に書き込んだデータのサイズ );
データを書き込むバッファを指定します。
この関数を呼び出す時は、データを書き込むバッファのサイズを指定します。 この関数が戻ると、実際にバッファに書き込んだデータのサイズが格納されています。
この関数は、 Write します(ストリームを使用せずにファイルにデータを書き込みます)。
注意 | |
---|---|
この関数は、 内部で SFBFile::Write 関数を呼び出します。 |
前提条件 | |
---|---|
この関数を呼び出す前に、 SFXFile::OpenReadWrite 関数を呼び出してファイルを開く必要があります 。 |
Copyright(c) 2002 - 2024 Sophia Cradle Incorporated All Rights Reserved. |