binファイル内の構造体を読取 FileReadStruct 関数

関数

ファイル関数

FileReadStruct 関数

この関数は、binファイルからパラメータとして渡された構造体に、ファイルポインタの現在位置から構造体データ (文字列、動的配列、仮想関数を除く) の内容を読み取ります。

読み取るファイルの指定は、FileOpen関数によって取得されるファイルハンドルを使って行ないます。

データ型と構成・戻り値

uint FileReadStruct(①, ②, ③);

戻り値は、処理が成功した場合は、読み取ったバイト数を返します。エラーの場合は 0を返します。読み取ったバイト数は構造体の大きさに対応します。

発生するエラーについては、GetLastError関数で取得することができます。

引数 [3]

FileReadStruct関数は 3個の引数で構成されます。


引数名データ型単位初期値説明
file_handleintFileOpen関数によって取得されるファイルハンドル
struct_objectconst void&ファイル内の構造体を読み取るための構造体。構造体のデータに文字列、動的配列、仮想関数を含めることはできません。
sizeint-1読み取るバイト数。初期値の「-1」は構造体全体を読み取ります。
※初期値があるものは省略可能です。省略した場合、初期値が設定されます。

使用例

FileReadStruct関数による binファイル内の構造体の読み取り

FileReadStruct関数を使って指定した binファイル内の構造体のデータを読み取ります。書き込む構造体は「MyStruct1」、これを読み出す時に使用する構造体を「MyStruct2」とします。

読み取ったファイルの場所については FileOpen関数のページで確認してください。

コード

// FileReadStruct関数による binファイル内の構造体の読み取り
#property strict
void OnInit() {

string filename = "test.bin";  // ファイル名
int handle;                    // ファイルハンドル
    
handle = FileOpen(filename, FILE_READ | FILE_WRITE | FILE_BIN );

struct MyStruct1              // ファイルに書き込む構造体
{
    double   price;
    datetime time;
};
MyStruct1 my_struct1;
my_struct1.price = Bid;
my_struct1.time = TimeLocal();

FileWriteStruct(handle, my_struct1);

FileSeek(handle, 0, SEEK_SET); // ファイルポインタの位置を先頭に移動

struct MyStruct2               // ファイルの構造体データを読み出す構造体
{
    double   price;
    datetime time;
};
MyStruct2 my_struct2;

uint b = FileReadStruct(handle, my_struct2, -1);

Print("読取バイト数:", b);
Print("読取Bid値:", my_struct2.price);
Print("読取時刻:", my_struct2.time);

FileClose(handle);
}

コードをコンパイルして実行する方法はこちらを参考にしてください。(デモ口座でお試しください)

結果

タイトルとURLをコピーしました