CFile try/catch



  • Guten Abend,

    laut MSN soll man die Arbeit mit dem CFile-Objekt in einen try-catch-Block packen.
    Folgende Realisierung liefert aber Fehler, sowohl wenn die Datei in 'strQuelle' vorhanden ist
    oder auch nicht vorhanden ist. Es meldet sich die MS Visual C++ Debug Library und erst dann
    die eigene Fehlermeldung. Eigentlich sollte sich nur die eigene Meldung zeigen?????

    CFile cf;
    CString strDatei;
    
    // Fehlerbehandlung zur Dateiausnahme.
    try  
    {
    	// Datei öffnen.
    	cf.Open(strQuelle, CFile::modeRead);
    	// DateiLänge für den temp. Puffer bestimmen.
    	int intFileLength = cf.GetLength();
    	// Temp. Puffer anlegen.
    	char * buffer = new char[intFileLength];
    	// Datei in den temp. Puffer einlesen.
    	cf.Read(buffer, intFileLength);
    	// Puffer abschliessen.
    	buffer[intFileLength] = 0;
    	// Puffer an CString übergeben.
    	strDatei = buffer;
    	// Den temp. Puffer wieder löschen.
    	delete[] buffer;
    }
    catch(CFileException * e)
    {
    	if ( e -> m_cause  == CFileException::fileNotFound)
    	{
    		AfxMessageBox("Die Datei 'quelldaten.txt' konnte nicht geöffnet werden.");
    		e -> Delete();
    	}
    }
    

    Was ist zu tun?
    Manuela



  • Manuela schrieb:

    char * buffer = new char[intFileLength];
            // ...
    	buffer[intFileLength] = 0;
    

    Der Puffer ist zu klein! Es muesste

    char * buffer = new char[intFileLength+1]; // +1
    

    heissen.



  • zu OpenFlags aus der MSDN

    MSDN schrieb:

    One access permission and one share option are required

    Du hast aber nur ein Flag in deiner Open-Methode übergeben. Daher rührt der Fehler, denke ich.


Anmelden zum Antworten