以下のソースコードは、
[vectorのサイズ(4byte)][0番目の要素][1番目の要素]……
という形式のバイナリファイルが作成されることを期待するコードなのですが、実行してみるとvectorのサイズだけが正常に書き込まれ、それ以外は全く書き込まれませんでした。
#define _CRT_SECURE_NO_DEPRECATE
/*
#include "DxLib.h"
#define FW_DX_DEF_
//*/
#define FW_MAIN_
#define FW_STD_DEF_
//*
#define FW_STD_PROGRAMABLE_DEF_
#define FW_DX_PROGRAMABLE_DEF_
//*/
#include "safe_fireworks/fireworks.h"
int main()
{
fw::vector<char> chars;
chars.add(0).add(1).add(2).add(3).add(4);
fw::bfile("test.dat", true).open().clear().write(chars);
printf("finish\n");
}
fw::vector用の書き込みの処理を行っている部分は
template<typename T>
const bfile & write(const fw::vector<T> & req) const
{
*this << req.size();
for(uint i=0;i<req.size();++i) *this << req[i];
return *this;
}
書き込み個数に1を指定したのに0が返ってきたということはエラーが発生したということです。
また、 *this << req の処理が終了した直後、何故かfw::bfile::close()が呼び出され、ファイルハンドルが閉じられてしまいます。
よってそれ以降書き込みが行われません。
fwriteがエラーを返す原因には何が考えられますか?
私では、「ファイルポインタが無効」くらいしか思いつきません。
しかし、vectorのサイズは正しく書き込まれているわけですから、ファイルポインタが無効であるということは無いはずです。
また、私のPCでは今のところ100%の確率でfwriteがエラーを返していますが、他の環境では違うのかもしれません。
よろしければこのプログラムを実行してみて、同じディレクトリに生成されるtest.datの内容をバイナリエディタで確認して頂けないでしょうか?
05 00 00 00 00 01 02 03 04
もしくは
00 00 00 05 00 01 02 03 04
となっていれば期待通りの結果です。
よろしくお願いいたします。