以下のソースコードは、
[vectorのサイズ(4byte)][0番目の要素][1番目の要素]……
という形式のバイナリファイルが作成されることを期待するコードなのですが、実行してみるとvectorのサイズだけが正常に書き込まれ、それ以外は全く書き込まれませんでした。
- コード[C++]: 全て選択
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22#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名前空間に属する識別子はsafe_fireworks(自作のヘッダファイル群※今回関係ないものは削除済)に定義されています。
fw::vector用の書き込みの処理を行っている部分は
- コード[C++]: 全て選択
1
2
3
4
5
6
7template<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;
}
この部分なのですが、forループの初回で最終的にfwriteが呼び出され、0が返されます。
書き込み個数に1を指定したのに0が返ってきたということはエラーが発生したということです。
また、 *this << req[i] の処理が終了した直後、何故か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
となっていれば期待通りの結果です。
よろしくお願いいたします。