iostreamの挙動について
//save.h
class c_save{
ofstream ostrm;
ifstream istrm;
public:
void read(int *point);
void write(int *point);
};
//save.cpp
void c_save::read(int *point){
istrm.open("savedata.sav",ios::in | ios::binary);
if(!istrm){
MessageBox(NULL,L"セーブデータが読み込めませんでした。\n新規セーブデータを作成します。",L"セーブデータの作成",MB_OK);
ostrm.open("savedata.sav",ios::out | ios::trunc | ios::binary);
if(!ostrm){
MessageBox(NULL,L"新規セーブデータの作成に失敗しました。",L"セーブデータの作成",MB_OK);
}
else{
*point = 0;
ostrm.write((char *)point,sizeof(int));
}
ostrm.close();
}
else{
istrm.read((char *)point,sizeof(int));
}
istrm.close();
}
void c_save::write(int *point){
ostrm.open("savedata.sav",ios::out | ios::trunc | ios::binary);
if(!ostrm){
MessageBox(NULL,L"セーブデータの書き込みに失敗しました。",L"セーブデータの書き込み",MB_OK);
}
else{
ostrm.write((char *)point,sizeof(int));
}
ostrm.close();
}
ゲーム用に、ポイントを記録するために上記のようなクラスを作成したのですが、read関数を呼び出し、その後write関数を呼び出し、その次にまたread関数を呼び出すと、read関数で2回ともセーブデータが読み込めませんというメッセージがでてしまいます。
一度目のread関数でsavedata.savは作成されているのにもかかわらず、二度目でも読み込めないのはなぜでしょうか?
ちなみに、アプリケーションを再起動させるとsavedata.savは認識されます。