Probleme mit Serialisierung
-
Hallo
Ich wollte mal fragen, wie man es anstellen kann eine neue Datei anzulegen, wenn keine Datei vorhanden ist. Ich habe eine kleine Highscore programmiert und habe die Daten in einer Datei Namens Highscore2.dat. Wenn ich das Programm im gewohnten Verzeichnis starte, funktioniert alles einwandfrei. Wenn ich die *.exe allerdings verschiebe, findet er logischerweise diese Datei nicht. Ich will das Programm also so schreiben, dass er in diesem Falle eine neue Datei anlegt und alle Daten auf Null setzt. Hier mein Versuch:
void CKniffelDlg::LoadHighScore(void) { CFile f; char* pChar="Highscore2.dat"; char buf[512]; if(!f.Open(pChar, CFile::modeRead)) { MessageBox("neues File"); char* pChar="c:\\Highscore3.dat"; for(int i=0;i<10;i++) { m_StartDialog.m_aiAusgabeHScr[i]=0; m_StartDialog.m_astrAusgabeName[i]="unbekannt"; } f.Open(pChar,CFile::modeCreate | CFile::modeWrite); CArchive ar(&f, CArchive::store, 512, buf); f.Open(pChar, CFile::modeRead); } CArchive ar(&f, CArchive::load, 512,buf); Serialize(ar); }
Leider funktioniert das so nicht.
Danke für eure Hilfe
Chrische
-
Würde es so machen :
void CKniffelDlg::LoadHighScore(void){ CFile f; char* pChar="Highscore2.dat"; char buf[512]; if(!f.Open(pChar, CFile::modeRead)){ // File nicht gefunden manuell initialisieren // das neue file wird erst bein speichern des Highscore erzeugt MessageBox("neues File"); for(int i=0;i<10;i++) { m_StartDialog.m_aiAusgabeHScr[i]=0; m_StartDialog.m_astrAusgabeName[i]="unbekannt"; } } else { // Highscore2.dat existiert Archiv lesen CArchive ar(&f, CArchive::load, 512,buf); Serialize(ar); } }
Ich denke der Grund warum deine Version nicht funktioniert ist der das du im if-block auf das CFile f zugreifen willst und da ist das fail-bit schon gesetzt.
Kurt