SophiaFramework UNIVERSE 5.3 |
SFXFile クラスは、ファイルストレージを表すクラスです。 ファイルの作成や、ファイルへのデータの読み書き、 ファイル属性などの情報の取得、テンポラリファイルの作成などが行えます。
ファイルストレージへのデータの読み書きは、 SFXFile クラスを使用して以下の手順で行います。
■ SFXFile クラスの使用手順
ファイルのオープンモード | |
---|---|
ファイルのオープンモードには、読み込みモードと読み書きモードの 2 種類があります。 ファイル入力の場合は SFXFile::OpenReadOnly 関数を呼び出して 読み込みモードでファイルを開きます。 ファイル出力の場合は SFXFile::OpenReadWrite 関数を呼び出して読み書きモードでファイルを開きます。 |
ファイルポインタ | |
---|---|
SFXFile クラスは、読み書き用のファイルポインタを 1 つ持ちます。 SFXFile::Read / SFXFile::Write 関数は、 ポインタの位置からデータを読み込み / 書き込み、その分ファイルポインタを移動します。 SFXFile::Seek / SFXFile::SeekStart / SFXFile::SeekEnd 関数を呼び出してファイルポインタを移動することも可能です。 また、ストリームを利用して読み書きする場合も、 読み書きしたデータ量に応じてファイルポインタは移動します。 |
例 18.1. ファイル入力
SFXFile file; // ファイル SFXAnsiStringStreamReader reader; // ファイル読み込み用ストリーム SFXAnsiString string; // 読み込む変数 // 読み込みモードでファイルを開く if ((error = file.OpenReadOnly(SFXPath("/dir/data.txt"))) == SFERR_NO_ERROR) { // ファイル読み込み用ストリームを取得する // ※ size 引数を指定していないのでストリームバッファは可変長 if ((error = file.GetStreamReader(&reader)) == SFERR_NO_ERROR) { // ファイルからストリームバッファにデータを読み込む // ※1. 読み込んだデータのサイズに合わせてストリームバッファは自動的に拡張される // ※2. 可変長バッファストリームの場合、1 回の Fetch 関数呼び出しで読み込みは完了する if ((error = reader.Fetch()) == SFERR_NO_ERROR) { // ストリームのバッファから string 変数にデータを読み込む if ((error = reader.ReadSFXAnsiString(&string)) == SFERR_NO_ERROR) { // ファイル読み込み成功! // string 変数の内容をデバッグウィンドウに表示する TRACE("%s", string.GetCString()); } } // ファイル読み込み用ストリームを解放する reader.Release(); } // ファイルを閉じる file.Close(); } if (error != SFERR_NO_ERROR) { // エラーが発生したとき ... }
可変長バッファストリームによる読み込み | |
---|---|
ストリームにはバッファがあります。 SFXFile::GetStreamReader 関数で size 引数を指定せずにファイル読み込み用ストリームを取得しているので、 可変長バッファが使用されます。 このため、 ストリームバッファは入力ファイルと同じサイズまで拡張されます。 SFXStreamReader::Fetch 関数は、 ファイルからデータを読み込み、ストリームバッファに読み込みます。 SFXAnsiStringStreamReader::ReadSFXAnsiString 関数は、 ストリームバッファからデータを読み込み、string 変数に格納します。 |
データを複数セグメントに分割して読み込む方法 | |
---|---|
固定長バッファを使うストリームを参照してください。 |
例 18.2. ファイル出力
SFXFile file; // ファイル SFXAnsiStringStreamWriter writer; // ファイル書き込み用ストリーム SFXAnsiString string("abcdefg"); // 書き込む変数 // 読み書きモードでファイルを開く if ((error = file.OpenReadWrite(SFXPath("/dir/data.txt"))) == SFERR_NO_ERROR) { // ファイル書き込み用ストリームを取得する // ※ size 引数を指定していないのでストリームバッファは可変長 if ((error = file.GetStreamWriter(&writer)) == SFERR_NO_ERROR) { // string 変数からストリームバッファにデータを書き込む // ※ 書き込んだデータのサイズに合わせてストリームバッファは自動的に拡張される if ((error = writer.WriteSFXAnsiString(string)) == SFERR_NO_ERROR) { // ストリームバッファのデータをファイルにデータを書き込む // ※ 可変長バッファストリームの場合、1 回の Flush 関数呼び出しで書き込みは完了する error = writer.Flush(); } // ファイル書き込み用ストリームを解放する writer.Release(); } // ファイルを閉じる file.Close(); } if (error != SFERR_NO_ERROR) { // エラーが発生したとき ... }
可変長バッファストリームによる書き込み | |
---|---|
ストリームにはバッファがあります。 SFXFile::GetStreamWriter 関数で size 引数を指定せずにファイル書き込み用ストリームを取得しているので、 可変長バッファが使用されます。 このため、 ストリームバッファは出力ファイルに書き込む全データと同じサイズまで拡張されます。 SFXAnsiStringStreamWriter::WriteSFXAnsiString 関数は、 string 変数のデータをストリームバッファに書き込みます。 SFXStreamWriter::Flush 関数は、 ストリームバッファ内のデータをファイルに書き込みます。 |
フラッシュしないとき | |
---|---|
Flush 関数を呼び出さずにファイルを閉じると、データはファイルに書き込まれません。 |
データを複数セグメントに分割して書き込む方法 | |
---|---|
固定長バッファを使うストリームを参照してください。 |
Copyright(c) 2002 - 2024 Sophia Cradle Incorporated All Rights Reserved. |