前のページ次のページ上に戻るホーム BREW C++ ライブラリ & GUI フレームワーク & XML ミドルウェア : SophiaFramework UNIVERSE 5.0
SFXFile
ファイルを操作するためのクラスです。
#include <SFXFile.h.hpp>
class SFXFile : public SFXStorage;
SFMTYPEDEFCLASS(SFXFile)

継承図

SFXFile クラスの継承図

協調図

SFXFile クラスの協調図

解説

ファイルの作成や読み書き、属性などの情報の取得、テンポラリ ファイルの作成を行います。

例 729. ファイルを読み込む方法

SFCError error;  // エラー値
SFXFile file;    // ファイル クラス ( のインスタンス )
SFXAnsiStringStreamReader reader; // ファイル読み込み用ストリーム
SFXAnsiString stringFromFile;     // この変数にデータが読み込まれる
SFXAnsiString tempString;

// 読み込みモードでファイルを開く
if ((error = file.OpenReadOnly(SFXPath("/dir1/data.txt"))) == SFERR_NO_ERROR) {

    // ファイル読み込み用ストリームを取得する ( 1024 はバッファサイズ )
    if ((error = file.GetStreamReader(1024, &reader)) == SFERR_NO_ERROR) {

        while (!reader.Ends()) { // ファイル読み込み用ストリームの終端に到達するまで繰り返す

            // フェッチする ( データを読み込む ) 
            // バッファサイズを指定しているので、1024 バイトしか読み込まれない
            if ((error = reader.Fetch()) != SFERR_NO_ERROR) {
                // エラーのとき
                break; 
            }

            // tempString にデータを読み込む
            if ((error = reader.ReadSFXAnsiString(&tempString))
                != SFERR_NO_ERROR) { 
                // エラーのとき
                break;
            }

            // stringFromFile の末尾に tempString を加える
            stringFromFile += tempString;
        }
        
        reader.Release();
    }
    file.Close();
}

例 730. ファイルの書き込み

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("/dir1/data.txt")))
    == SFERR_NO_ERROR) {

    // ファイル書き込み用ストリームを取得する
    if ((error = file.GetStreamWriter(bufferSize, &writer))
        == SFERR_NO_ERROR) {

        for (; p < endOfString; p += bufferSize) {

            // 書き込むサイズ
            SInt32 size = (endOfString - p < bufferSize) ? endOfString - p : bufferSize;

            // 文字列を書き込む
            if ((error = writer.Write(p, size)) != SFERR_NO_ERROR) {
                break; // エラー
            }
            // フラッシュする ( 実際にファイルにデータを書き込む )
            if ((error = writer.Flush()) != SFERR_NO_ERROR) { 
                // エラーのとき
                break;
            }
        }
        writer.Release();
    }
    file.Close();
}

参照

SFXDirectory | SFXPath | ファイル操作

メンバ

コンストラクタ/デストラクタ
SFXFile( Void )
SFXFile( SInt32 cache )
SFXFile クラスのコンストラクタです。
~SFXFile( Void )
Destructor of SFXFile class.
パブリック関数
Void Cancel( Void )
登録されているコールバックをキャンセルします。
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 )
ファイルの作成日時を取得します。
SFBFileSmpConstRef GetSFBFile( Void )
内部に保持しているファイル インターフェースを取得します。
SFBFileMgrSmpConstRef GetSFBFileMgr( Void )
内部に保持しているファイル マネージャ インターフェースを取得します。
static
SFCError
GetSize( SFXPathConstRef path , UInt32Ptr result )
ファイル サイズを取得します。
SFCError GetStreamReader( UInt32 size , SFXStreamReaderPtr result )
GetStreamReader( SFXStreamReaderPtr result )
ファイル読み込み用ストリームを取得します。
SFCError GetStreamWriter( UInt32 size , SFXStreamWriterPtr result )
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 )
読み込み用ストリームを使わずにファイルからデータを読み込みます。
static
SFCError
Remove( SFXPathConstRef path )
ファイルを削除します。
static
SFCError
Rename( SFXPathConstRef from , SFXPathConstRef to )
ファイルの移動 / ファイル名の変更を行います。
SFCError ScheduleRead( CallbackSPP spp , VoidPtr reference )
読み込み用ストリームを使わないファイルからのデータ読み込みをスケジュールします。
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 )
書き込み用ストリームを使わずにファイルにデータを書き込みます。
CallbackSPP (SFXStorage から継承)
コールバック関数を表す型です。

SFXFile::SFXFile
SFXFile クラスのコンストラクタです。
[ public, explicit ]
SFXFile(Void);
[ public, explicit ]
SFXFile(
    SInt32 cache   // ファイル操作時のキャッシュサイズ
);

参照

SFXFile::SetCacheSize


SFXFile::~SFXFile
Destructor of SFXFile class.
[ public, virtual ]
~SFXFile(Void);

解説

Close an opened file.


SFXFile::Cancel
登録されているコールバックをキャンセルします。
[ public, virtual ]
Void Cancel(Void);

参照

SFXFile::ScheduleRead


SFXFile::Close
ファイルをクローズします。
[ public ]
Void Close(Void);

解説

ファイルがオープンされているとき、コールバックをキャンセルしてファイルをクローズします。

使用例

SFXFile file;

...

file.Close();  // ファイルをクローズする

参照

SFXFile::Create | SFXFile::OpenReadOnly | SFXFile::OpenReadWrite


SFXFile::Create
ファイルを作成します。
[ public, static ]
SFCError Create(
    SFXPathConstRef path   // 作成するファイルのパス
    Bool force = false     // ディレクトリを再帰的に作成するかどうか
);

戻り値

  • 成功したとき : SFERR_NO_ERROR
  • パスが不正なとき : SFERR_INVALID_PARAM
  • 失敗したとき : SFERR_FAILED

解説

引数 force を true にすると、指定したパスに存在しないディレクトリも作成します。

使用例

// ファイルを強制的に作成
// 親ディレクトリが存在しない場合は自動的に作成
SFXFile::Create(SFXPath("/dir1/data.txt"), true);

参照

SFXFile::OpenReadOnly | SFXFile::OpenReadWrite


SFXFile::DeviceFreeSpace
デバイスの空き容量を取得します。
[ public, static ]
SFCError DeviceFreeSpace(
    UInt32Ptr result   // 空き容量を受け取るポインター
);

戻り値

  • 成功したとき : SFERR_NO_ERROR
  • 引数が null のとき : SFERR_INVALID_PARAM
  • 失敗したとき : SFERR_FAILED

使用例

UInt32 space;

SFXFile::DeviceFreeSpace(&space); // space に空き容量を取得する

参照

SFXFile::DeviceTotalSpace


SFXFile::DeviceTotalSpace
デバイスの容量を取得します。
[ public, static ]
SFCError DeviceTotalSpace(
    UInt32Ptr result   // 容量を受け取るポインター
);

戻り値

  • 成功したとき : SFERR_NO_ERROR
  • 引数が null のとき : SFERR_INVALID_PARAM
  • 失敗したとき : SFERR_FAILED

使用例

UInt32 space;

SFXFile::DeviceTotalSpace(&space); // space にデバイスの容量を取得する

参照

SFXFile::DeviceFreeSpace


SFXFile::Exists
ファイルが存在するか調べます。
[ public, static ]
SFCError Exists(
    SFXPathConstRef path   // 存在を調べるファイルのパス
    BoolPtr result         // 結果を受け取るポインター
);

戻り値

  • 成功したとき : SFERR_NO_ERROR
  • 引数が null のとき、またはパスが不正なとき : SFERR_INVALID_PARAM
  • 失敗したとき : SFERR_FAILED

使用例

Bool b;

// Exists 関数の戻り値はエラー値
SFXFile::Exists(SFXPath("/dir1/data.txt"), &b);

if (b) {
    // ファイルが存在するとき
    ...

}

参照

SFXFile::IsReadOnly | SFXFile::IsSystem


SFXFile::GetCacheSize
ファイル操作時のキャッシュ サイズを取得します。
[ public, const ]
SInt32 GetCacheSize(Void);

参照

SFXFile::SetCacheSize


SFXFile::GetCreateDate
ファイルの作成日時を取得します。
[ public, static ]
SFCError GetCreateDate(
    SFXPathConstRef path   // ファイルのパス
    SFXDatePtr result      // 作成日時を受け取るポインター
);

戻り値

  • 実行に成功したとき : SFERR_NO_ERROR
  • 引数が null のとき、またはパスが不正なとき : SFERR_INVALID_PARAM
  • 実行に失敗したとき : SFERR_FAILED

使用例

SFXDate date;

// ファイルの作成日時を取得する
SFXFile::GetCreateDate(SFXPath("/dir1/data.txt"), &date);

SFXFile::GetSFBFile
内部に保持しているファイル インターフェースを取得します。
[ public, const ]
SFBFileSmpConstRef GetSFBFile(Void);

解説

内部に保持しているファイル インターフェース( SFBFile クラスのインスタンス )を取得します。

参照

SFBFile


SFXFile::GetSFBFileMgr
内部に保持しているファイル マネージャ インターフェースを取得します。
[ public, const ]
SFBFileMgrSmpConstRef GetSFBFileMgr(Void);

解説

内部に保持しているファイル マネージャ インターフェース( SFBFileMgr クラスのインスタンス )を取得します。

参照

SFBFileMgr


SFXFile::GetSize
ファイル サイズを取得します。
[ public, static ]
SFCError GetSize(
    SFXPathConstRef path   // ファイルのパス
    UInt32Ptr result       // サイズを受け取るポインター
);

戻り値

  • 成功したとき : SFERR_NO_ERROR
  • 引数が null のとき、またはパスが不正なとき : SFERR_INVALID_PARAM
  • 失敗したとき : SFERR_FAILED

使用例

UInt32 size;

// ファイル サイズを取得する
SFXFile::GetSize(SFXPath("/dir1/data.txt"), &size); 

SFXFile::GetStreamReader
ファイル読み込み用ストリームを取得します。
[ public, virtual ]
SFCError GetStreamReader(
    UInt32 size                 // バッファサイズ
    SFXStreamReaderPtr result   // ファイル読み込み用ストリームへのポインター
);
[ public, virtual ]
SFCError GetStreamReader(
    SFXStreamReaderPtr result   // ファイル読み込み用ストリームへのポインター
);

戻り値

  • 成功したとき : SFERR_NO_ERROR
  • 引数が null のとき : SFERR_INVALID_PARAM
  • ファイルが開いていないとき : SFERR_INVALID_STATE
  • メモリ不足のとき : SFERR_NO_MEMORY

解説

ファイル読み込み用ストリームのバッファ サイズを指定することも可能です。 ファイル読み込み用ストリームは、読み込むデータの種類に応じて SFXBinaryStreamReaderSFXAnsiStringStreamReader、または SFXWideStringStreamReader クラスを使い分けます。

使用例

SFXFile file;
SFXAnsiStringStreamReader reader;
SFXAnsiString temp;
SFXAnsiString string;       // 読み出した文字列を格納する
SFXPath path("/data.txt");  // ファイル名

// ファイルをオープンする
if (file.OpenReadOnly(path) == SFERR_NO_ERROR) {
    // ファイルのオープンに成功したとき
    
    // ファイル読み込み用ストリームを取得する
    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


SFXFile::GetStreamWriter
ファイル書き込み用ストリームを取得します。
[ public, virtual ]
SFCError GetStreamWriter(
    UInt32 size                 // サイズ
    SFXStreamWriterPtr result   // ファイル書き込み用ストリームへのポインター
);
[ public, virtual ]
SFCError GetStreamWriter(
    SFXStreamWriterPtr result   // ファイル書き込み用ストリームへのポインター
);

戻り値

  • 成功したとき : SFERR_NO_ERROR
  • 引数が null のとき : SFERR_INVALID_PARAM
  • ファイルが開いていないとき : SFERR_INVALID_STATE
  • メモリ不足のとき : SFERR_NO_MEMORY

解説

ファイル書き込み用ストリームのバッファ サイズを指定します。 ファイル書き込み用ストリームは、書き込むデータの種類に応じて 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


SFXFile::GetTemporaryPath
テンポラリ ファイルのパスを取得します。
[ public, static ]
SFCError GetTemporaryPath(
    SFXPathConstRef path   // テンポラリ ファイルを作成するディレクトリのパス
    SFXPathPtr result      // テンポラリ ファイルのパスを受け取るポインター
);

戻り値

  • 成功したとき : SFERR_NO_ERROR
  • 引数が null のとき、またはパスがディレクトリでないとき : SFERR_INVALID_PARAM
  • 失敗したとき : SFERR_FAILED

解説

SFXFile::GetTemporaryPath 関数は、一時的に作成するファイルのために、 既存のものと重複しない一時的なファイル パスを取得するときに使います。

[Note] 注意
一時的でない永続的なファイルのパスを取得する場合は、SFXFile::GetUniquePath 関数を使います。
[Note] 注意
SFXFile::GetTemporaryPath 関数は、内部的に接頭辞として "sfx"、接尾辞として "fle.tmp" をそれぞれ引数に指定して SFXFile::GetUniquePath 関数を呼び出しています。

使用例

SFXPath dir("/");
SFXPath path;

if (SFXFile::GetTemporaryPath(path, &path) == SFERR_NO_ERROR) {
    // "/sfx7182CBD4fle.tmp" のようなファイル パスが得られる
    TRACE("%s", path.Get().GetCString());
}

参照

SFXFile::GetUniquePath | SFXDirectory::GetTemporaryPath | SFXDirectory::GetUniquePath


SFXFile::GetUniquePath
既存のものと重複しない永続的なファイル パスを取得します。
[ public, static ]
SFCError GetUniquePath(
    SFXPathConstRef path           // ファイルを作成するディレクトリのパス
    SFXAnsiStringConstRef prefix   // ファイル名のプレフィックス(接頭辞)
    SFXAnsiStringConstRef suffix   // ファイル名のサフィックス(接尾辞)
    SFXPathPtr result              // ファイルのパスを受け取るポインター
);

戻り値

  • 成功したとき : SFERR_NO_ERROR
  • 引数が null のとき、またはパスがディレクトリでないとき : SFERR_INVALID_PARAM
  • 失敗したとき : SFERR_FAILED

解説

ファイル名は乱数によって生成されるため、 既に多くのファイルが存在する場合、ファイル パスの取得に失敗する可能性があります。

[Note] 注意
乱数で発生させたファイル名がすでに存在する場合、64 回まで繰り返しこの操作をリトライします。 それでも既存のものと重複しないファイル パスを生成できない場合は失敗となります。
[Note] 注意
一時的なテンポラリ ファイル ( すぐに削除するファイル ) の場合は、SFXFile::GetTemporaryPath 関数を使います。

使用例

SFXPath dir("/");
SFXPath path;

if (SFXFile::GetUniquePath(dir, "sfx", ".dat", &path) == SFERR_NO_ERROR) {
    // "/sfx7182CBD4.dat" のようなファイル パスが得られる
    TRACE("%s", path.Get().GetCString());
}

参照

SFXFile::GetTemporaryPath | SFXDirectory::GetUniquePath


SFXFile::IsReadOnly
ファイルが読み込み専用か判定します。
[ public, static ]
SFCError IsReadOnly(
    SFXPathConstRef path   // 調べるファイルのパス
    BoolPtr result         // 結果を受け取るポインター
);

戻り値

  • 成功したとき : SFERR_NO_ERROR
  • 引数が null のとき : SFERR_INVALID_PARAM
  • 失敗したとき : SFERR_FAILED

使用例

Bool b;

// IsReadOnly 関数の戻り値はエラー値
SFXFile::IsReadOnly(SFXPath("/dir1/data.txt"), &b);

if (b) {
    // ファイルが読み込み専用の場合
    ...
}

参照

SFXFile::Exists | SFXFile::IsSystem


SFXFile::IsSystem
ファイルがシステム ファイルか判定します。
[ public, static ]
SFCError IsSystem(
    SFXPathConstRef path   // 調べるファイルのパス
    BoolPtr result         // 結果を受け取るポインター
);

戻り値

  • 成功したとき : SFERR_NO_ERROR
  • 引数が null のとき : SFERR_INVALID_PARAM
  • 失敗したとき : SFERR_FAILED

参照

SFXFile::Exists | SFXFile::IsReadOnly


SFXFile::OpenReadOnly
ファイルを読み込みモードでオープンします。
[ public ]
SFCError OpenReadOnly(
    SFXPathConstRef path   // オープンするファイル パス
);

戻り値

  • 成功したとき : SFERR_NO_ERROR
  • ファイルが既にオープンされているとき : SFERR_INVALID_STATE
  • パスが不正なとき : SFERR_INVALID_PARAM
  • 失敗したとき : SFERR_FAILED
  • その他のエラーのとき : AEEError.h で定義されているエラー値

使用例

SFXFile file;

// ファイルを読み込みモードでオープンする
if (file.OpenReadOnly(SFXPath("/dir1/data.txt")) == SFERR_NO_ERROR) {
    
    ...
    
    // ファイルをクローズする
    file.Close();
}

参照

SFXFile::Create | SFXFile::OpenReadWrite


SFXFile::OpenReadWrite
ファイルを読み書きモードでオープンします。
[ public ]
SFCError OpenReadWrite(
    SFXPathConstRef path   // オープンするファイルのパス
    Bool force = false     // ファイルが存在しない場合は作成するかどうか
);

戻り値

  • 成功したとき : SFERR_NO_ERROR
  • ファイルが既にオープンされているとき : SFERR_INVALID_STATE
  • パスが不正なとき : SFERR_INVALID_PARAM
  • 失敗したとき : SFERR_FAILED
  • その他のエラーのとき : AEEError.h で定義されているエラー値

使用例

SFXFile file;

// ファイルを読み書きモードでオープンする
if (file.OpenReadWrite(SFXPath("/dir1/data.txt")) == SFERR_NO_ERROR) {

    ...

    // ファイルをクローズする
    file.Close();
}

参照

SFXFile::Create | SFXFile::OpenReadOnly


SFXFile::Read
読み込み用ストリームを使わずにファイルからデータを読み込みます。
[ public, virtual ]
SFCError Read(
    VoidPtr buffer   // データを受け取るバッファのポインター
    UInt32Ptr size   // 読み込むバイト数、読み込んだバイト数を受け取るポインター
);

戻り値

  • 成功したとき : SFERR_NO_ERROR
  • ファイルがオープンされていないとき : SFERR_INVALID_STATE
  • 引数が null のとき : SFERR_INVALID_PARAM
  • 失敗したとき : SFERR_FAILED
  • 再試行が必要なとき : AEE_STREAM_WOULDBLOCK
  • ファイルの終端であるとき : EFILEEOF

使用例

あるファイル ( src.txt ) を 別のファイル ( dst.txt ) にコピーします。

SFXFile fin;
SFXFile fout;
SFXBinaryStreamReader reader;
SFXBinaryStreamWriter writer;
SFXBuffer buffer;

// 入力ファイルを読み込みモードでオープンする
if (fin.OpenReadOnly(SFXPath("/src.txt")) == SFERR_NO_ERROR) {
    // 出力ファイルを読み書きモードでオープンする
    if (fout.OpenReadWrite(SFXPath("/dst.txt")) == SFERR_NO_ERROR) {
        
        fin.GetStreamReader(1024, &reader);    // 読み込み用ストリームを取得する
        fout.GetStreamWriter(1024, &writer);   // 書き込み用ストリームを取得する

        UInt08 c;
        
        // 入力ファイルの終端まで
        while (!reader.Ends()) { 
            buffer.SetSize(reader.GetReadableSize());
            reader.Fetch();       // ファイルから読み込み用ストリームへデータを読み込む
            reader.Read(&buffer); // 読み込み用ストリームから buffer へデータを読み込む
            writer.Write(buffer); // buffer から書き込み用ストリームへデータを書き込む
            writer.Flush();       // 書き込み用ストリームからファイルへデータを書き込む
        }
        fout.Close();  // 出力ファイルをクローズする
    }
    fin.Close();       // 入力ファイルをクローズする
}

参照

SFXFile::OpenReadOnly | SFXFile::OpenReadWrite | SFXFile::Seek | SFXFile::Write


SFXFile::Remove
ファイルを削除します。
[ public, static ]
SFCError Remove(
    SFXPathConstRef path   // 削除するファイル パス
);

戻り値

  • 成功したとき : SFERR_NO_ERROR
  • パスが不正なとき : SFERR_INVALID_PARAM
  • 失敗したとき : SFERR_FAILED
  • その他のエラーのとき : AEEError.h で定義されているエラー値

使用例

if (SFXFile::Remove(SFXPath("/dir/data.txt")) == SFERR_NO_ERROR) {
   ...
}

SFXFile::Rename
ファイルの移動 / ファイル名の変更を行います。
[ public, static ]
SFCError Rename(
    SFXPathConstRef from   // 変更前のファイル パス
    SFXPathConstRef to     // 変更後のファイル パス
);

戻り値

  • 成功したとき : SFERR_NO_ERROR
  • 変更前のパスが不正なとき、または変更後のパスが不正なとき : SFERR_INVALID_PARAM
  • 失敗したとき : SFERR_FAILED

使用例

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) {
    ...
}

SFXFile::ScheduleRead
読み込み用ストリームを使わないファイルからのデータ読み込みをスケジュールします。
[ public, virtual ]
SFCError ScheduleRead(
    CallbackSPP spp     // コールバック関数のポインター
    VoidPtr reference   // コールバック関数に渡すユーザーデータ
);

戻り値

  • 成功したとき : SFERR_NO_ERROR
  • ファイルがオープンされていないとき、または既にコールバック関数が登録されているとき : SFERR_INVALID_STATE

解説

SFXFile::ScheduleRead 関数は、SFXFile::Read 関数を使ってファイルからデータを読み込むコールバック関数を登録するために使います。

SFXFile::Read 関数の戻り値が AEE_STREAM_WOULDBLOCK である場合や、まだ読み込むデータが残っている場合、 SFXFile::ScheduleRead 関数でコールバック関数を登録して、再びファイルからのデータ読み込みを試みます。

使用例

class MyClass {
    SFXFile _file;
    Void Function(Void);
    CALLBACK_DECLARE_SFXFILE(_SFXFile_OnRead)
};

Void MyClass::Function(Void)
{
    SFXPath  path("/dir1/data.txt");
    
    // ファイルを読み込みモードでオープンする
    if (_file.OpenReadOnly(path) == SFERR_NO_ERROR) {
        // ファイルからデータを読み込むようにスケジューリングする
        _file.ScheduleRead(CALLBACK_FUNCTION(_SFXFile_OnRead));// コールバック関数を登録する  
    }
}

// コールバック関数
CALLBACK_IMPLEMENT_SFXFILE(MyClass, _SFXFile_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());
             // ファイルからデータを読み込むようにスケジューリングする
             _file.ScheduleRead(CALLBACK_FUNCTION(_SFXFile_OnRead));  // コールバック関数を登録する
             break;
         case EFILEEOF:
             _file.Close();  // ファイルをクローズする
             break;
         case AEE_STREAM_WOULDBLOCK:
             // ファイルからデータを読み込むようにスケジューリングする
             _file.ScheduleRead(CALLBACK_FUNCTION(_SFXFile_OnRead));  // コールバック関数を登録する
             break;
        }
    return;
}

参照

SFXFile::Cancel


SFXFile::ScheduleWrite
【 現在、この関数は使えません。 】
[ public, virtual ]
SFCError ScheduleWrite(
    CallbackSPP spp     // コールバック関数のポインター
    VoidPtr reference   // コールバック関数に渡すユーザーデータ
);

解説

SFERR_UNSUPPORTED を返します。


SFXFile::Seek
現在の位置から指定した移動量だけファイル ポインターを移動します。
[ public ]
SFCError Seek(
    SInt32 distance   // 移動量
);

戻り値

  • 成功したとき : SFERR_NO_ERROR
  • ファイルがオープンされていないとき : SFERR_INVALID_STATE
  • 失敗したとき : SFERR_FAILED

解説

ファイル ポインターを前方に移動する場合は、移動量 ( distance パラメーター ) に負の値を指定します。

ファイルを読み込み専用モードでオープンしているとき、 移動後のファイル ポインターの位置がファイルの先頭よりも前方または末尾よりも後方になる場合、この操作は失敗します。

ファイルを読み書きモードでオープンしているとき、 移動後のファイル ポインターの位置がファイルの末尾を越える場合、ファイルはその位置まで拡張されます。 また、移動後のファイル ポインターの位置がファイルの先頭よりも前になる場合は、この操作は失敗します。

参照

SFXFile::SeekStart | SFXFile::SeekEnd | SFXFile::Tell


SFXFile::SeekEnd
ファイルの末尾から指定した移動量だけファイル ポインターを移動します。
[ public ]
SFCError SeekEnd(
    SInt32 distance   // 移動量
);

戻り値

  • 成功したとき : SFERR_NO_ERROR
  • ファイルがオープンされていないとき : SFERR_INVALID_STATE
  • 失敗したとき : SFERR_FAILED

解説

ファイル ポインターを前方に移動する場合は、移動量 ( distance パラメーター ) に負の値を指定します。

ファイルを読み込み専用モードでオープンしているとき、 移動後のファイル ポインターの位置がファイルの先頭よりも前方または末尾よりも後方になる場合、この操作は失敗します。

ファイルを読み書きモードでオープンしているとき、 移動後のファイル ポインターの位置がファイルの末尾を越える場合、ファイルはその位置まで拡張されます。 また、移動後のファイル ポインターの位置がファイルの先頭よりも前になる場合は、この操作は失敗します。

参照

SFXFile::Seek | SFXFile::SeekStart | SFXFile::Tell


SFXFile::SeekStart
ファイルの先頭からファイル ポインターを進めます。
[ public ]
SFCError SeekStart(
    SInt32 distance   // 移動量
);

戻り値

  • 成功したとき : SFERR_NO_ERROR
  • ファイルがオープンされていないとき : SFERR_INVALID_STATE
  • 失敗したとき : SFERR_FAILED

解説

ファイル ポインターを前方に移動する場合は、移動量 ( distance パラメーター ) に負の値を指定します。

ファイルを読み込み専用モードでオープンしているとき、 移動後のファイル ポインターの位置がファイルの先頭よりも前方または末尾よりも後方になる場合、この操作は失敗します。

ファイルを読み書きモードでオープンしているとき、 移動後のファイル ポインターの位置がファイルの末尾を越える場合、ファイルはその位置まで拡張されます。 また、移動後のファイル ポインターの位置がファイルの先頭よりも前になる場合は、この操作は失敗します。

参照

SFXFile::Seek | SFXFile::SeekEnd | SFXFile::Tell


SFXFile::SetCacheSize
ファイル操作時のキャッシュ サイズを設定します。
[ public ]
Void SetCacheSize(
    SInt32 size   // ファイル操作時のキャッシュ サイズ
);

参照

SFXFile::GetCacheSize


SFXFile::Tell
現在のファイル ポインターの位置を取得します。
[ public, const ]
UInt32 Tell(Void);

使用例

// 現在の位置でファイルを切り詰める
file.Truncate(file.Tell());

参照

SFXFile::Seek | SFXFile::SeekStart | SFXFile::SeekEnd


SFXFile::Truncate
指定した位置でファイルを切り捨てます。
[ public ]
SFCError Truncate(
    UInt32 position   // ファイルを切り捨てる位置
);

戻り値

  • 成功したとき : SFERR_NO_ERROR
  • ファイルがオープンされていないとき : SFERR_INVALID_STATE
  • 失敗したとき : SFERR_FAILED

使用例

// 現在の位置でファイルを切り捨てる
file.Truncate(file.Tell());

参照

SFXFile::Seek | SFXFile::SeekStart | SFXFile::SeekEnd | SFXFile::Tell


SFXFile::Write
書き込み用ストリームを使わずにファイルにデータを書き込みます。
[ public, virtual ]
SFCError Write(
    VoidConstPtr buffer   // 書き込むバッファのポインター
    UInt32Ptr size        // 書き込むバイト数、書き込んだバイト数を受け取るポインター
);

引数

buffer

書き込むデータを指定します。

size

SFXFile::Write 関数の呼び出し時は、書き込むデータのサイズを指定します。SFXFile::Write 関数が終了すると、実際に書き込んだデータのサイズが格納されます。

戻り値

  • 成功したとき : SFERR_NO_ERROR
  • ファイルがオープンされていないとき : SFERR_INVALID_STATE
  • 引数が null のとき : SFERR_INVALID_PARAM
  • 失敗したとき : SFERR_FAILED
  • ファイルが終端のとき : EFILEEOF

参照

SFXFile::OpenReadOnly | SFXFile::OpenReadWrite | SFXFile::Read SFXFile::Seek |