ホーム > デベロッパ > BREW FAQ

BREW FAQ : ファイルのアクセス位置を移動するには?

ファイルのアクセス位置を移動するには?

ファイルのアクセス位置を移動するには、IFile インターフェイスの IFILE_Seek 関数を使用します。 ファイルのオープン後に、IFILE_Seek 関数を使用してファイルのアクセス位置を変更します。

uint32 IFILE_Seek(
 IFile*        file,         // IFile インターフェイス
 FileSeekType  seekType,     // 移動の起点
 int32         moveDistance  // 移動量
);

ファイルのアクセス位置には、以下の値を指定します。

関数名 [BREW] 処理概要
_SEEK_CURRENT 現在のファイルのアクセス位置を起点とします。
_SEEK_START ファイルの先頭を起点とします。
_SEEK_END ファイルの末尾を起点とします。

SophiaFramework では、 SFBFile::Seek 関数を使用します。

[ BREW API のみを使用したコード ]

//
// ファイルのアクセス位置を移動します。
//

IShell*         shell = app->a.m_pishell;
IFileMgr*       filemgr;
IFile*          file;
char            buffer[128];
int             size;

// IFileMgr インターフェイスを作成します。
ISHELL_CreateInstance(shell, AEECLSID_FILEMGR, (void*)&filemgr);

// ファイルをオープンします。
file = ifilemgr_openfile(filemgr, "sample.txt", _ofm_read);

if (file != null) {
    // ファイルのアクセス位置を変更します。
    IFILE_Seek(file, _SEEK_START, 3);

    // ファイルからデータを読み込みます。
    size = ifile_read(file, buffer, sizeof(buffer) - 1);
    
    if (size > 0) {
        // 読み込んだファイルのデータを利用する処理
               ・
               ・
               ・
    }

    // ファイルをクローズします。
    IFILE_Release(file);
}

// IFileMgr インターフェイスを破棄します。
IFILEMGR_Release(filemgr);

[ SophiaFramework を使用したコード ]

//
// ファイルのアクセス位置を移動します。
//

SFBFileMgrSmp  filemgr;
SFBFileSmp     file;
AChar          buffer[128];
SInt32         size;

// SFBFileMgr インスタンスを作成します。
filemgr = sfbfilemgr::newinstance();

// ファイルをオープンします。
file = filemgr->openfile("sample.txt", _ofm_read);

if (file != null) {
    // ファイルのアクセス位置を変更します。
    file->Seek(_SEEK_START, 3);

    // ファイルからデータを読み込みます。
    size = file->read(buffer, sizeof(buffer) - 1);

    if (size > 0) {
        // 読み込んだファイルのデータを利用する処理
               ・
               ・
               ・
    }
}