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


Anmelden zum Antworten