Wenn du weißt wie groß deine String max werden können (musst du auf jeden Fall absichern), dann kannst du auf ein statisches Array zurückgreifen und somit deine Struktur in eine POD Struktur verwandeln, aber der c++ weg wäre eher
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
//Spielstand speichern
void CMenu::SaveScore(int scoreid, int level)
{
score[scoreid].Level = level;
if(level == 0)
score[scoreid].scoreName = "empty";
else
score[scoreid].scoreName = scoreText[scoreid].ToAnsiString();
std::ofstream openFile;
char savePath[50];
sprintf_s(savePath, "Data/Score/Score%i.load", scoreid+1);
openFile.open(savePath, std::ios::out | std::ios::binary);
if(openFile.is_open())
openFile << score[scoreid].Level << score[scoreid].scoreName;
openFile.close();
}
|
Oder mit ein paar persönliche Präferenzen:
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
12
|
//Spielstand speichern
void CMenu::SaveScore(int scoreid, int level)
{
std::ofstream openFile;
std::stringstream savePath;//include <sstream>
savePath << "Data/Score/Score" << scoreid+1 << ".load";
openFile.open(savePath.str().c_str(), std::ios::out | std::ios::binary);
if(openFile.is_open())
openFile << level << (!level ? "empty" : scoreText[scoreid].ToAnsiString());
openFile.close();
}
|
Alternativ kann man auch den << operator für deine Struktur überladen und somit "openFile << score[scoreid].Level << score[scoreid].scoreName;" durch "openFile << score[scoreid];" ersetzen. Fürs Laden ist es analog.
Ohh hmm. Funktioniert wahrscheinlich nicht mit binary; zumindest die beiden geposteten Varianten (bin irgendwie nicht mehr so drinne in C++). Das mit dem POD bzw überladen des << bzw >> operator gehts dennoch auch wenn man in diesem dann doch wieder write/read nutzt.