おせわになります。
下記のように構造体データをバイナリファイルに出力
する処理を行っています。
struct stKouzo
{
int i;
char a[40];
char b[20];
char c[20];
char d[6];
int j;
}
stKouzo Kouzo; //構造体変数
//Kouzoの変数に値を代入
Kouzo.i = 5;
・
・(省略)
・
FILE *file;
file = fopen("c:\tmp" , "wb"); //バイナリモードでファイル開く
fwrite(&Kouzo,94,1,file); //バイナリファイルに書き込む
fclose(file); //ファイルを閉じる
上記のコードで出力されたバイナリファイルを確認したところ、
構造体の「j」のデータの前に、16進表示で「CCCC」と、
4バイトのデータが勝手に挿入されてしまいます。
原因がわからなくて困っているので、
どなたか助けてください。
よろしくお願いします。
過去ログですが……
http://madia.world.coocan.jp/vc/vc_bbs/200407_04070025.html
ありがとうございます。
無事解決できました。
関連でもう一点教えてください。
stKouzo型構造体の配列を宣言し、
以下のように、バイナリファイルとして出力すると、
バイナリファイルの先頭に、4バイトのデータ「0200」
が挿入されてしまいます。
回避方法がありましたら
おしえてください。
よろしくおねがいします。
CArray<stSENRO_JOUSU, stSENRO_JOUSU> m_stKouzo; //stKouzo型構造体の配列
CFile file;
//ファイルを開く
file.Open
(strTDataFileName , CFile::modeCreate | CFile::modeWrite);
//アーカイブ構築
CArchive ar(&File, CArchive::store);
//書き込み
m_stKouzo.Serialize(ar);
//閉じる
ar.close;
file.close;
CArray::Serializeは配列サイズを書き出すからです。
CArray::GetData()とCArchive::Write()を使えばいいでしょう。
回答ありがとうございました。
大変たすかりました。
最悪、配列でループし、
構造体の各変数に1つずつ
データを書き出す処理をするところでした。
ツイート | ![]() |