C++ Alternative zur CFile und CArchive?

roker002

Commander
Registriert
Dez. 2007
Beiträge
2.106
Irgendwie läuft bei mir mit CArchive nicht so gut... wenn ich die WriteString(CSTRING) benutze bekomme ich zwischen jede Buchstabe noch nen NUL element. Wollte ein Export mit csv schreiben aber das Programm wofür ich Exportieren will erkenn die blöden NULs und spuckt mir ein Fehler aus.
mit << Operation gibts auch Probleme... der schreibt mir immer irgendein Mühl am anfang der Datei aus keine Ahnung wocher...


Hab alles schon 100x DEBUGT aber ich sehe da keine NUL oder MÜHLzeichen.

Kennt da eine bessere Methode?


Danke
 
Würde mal vermuten du schreibst einen widestring (unicode) oder öffnest die Datei in einem solchen Modus...
 
Ja es ist ein Unicode Projekt...
Wie kann ich dann mit Unicode Lösen? Will jetzt nicht 1000 Zeilen Code umschreiben lassen.

hmm habs ausprobiert aber VS9 findet kein ifstream oder ofstream... sogar mit dem include fstream

kann man es überhaupt für MFC projekte benutzen?
 
Was hat eigentlich diese Fehlermeldung zu bedeuten? Naja keine richtige Fehlermeldung aber eine "Ausnahme"

Code:
Eine Ausnahme (erste Chance) bei 0x761cf35f in bla.exe: Microsoft C++-Ausnahme: CArchiveException an Speicherposition 0x002fe974..
 
Blöde deutsche Meldungen :mad:.
Was die Meldung meint ist eine "Exception". Das entpricht zwar einer "Ausnahme", aber der englische Begriff ist geläufiger.

Und was dir die Meldung sagen will ist folgendes:
Bei der Verarbeitung deines CArchieve Objekts trat ein Fehler auf. Das CArchieve Objekt wirft daraufhin eine CArchieveException, die von deinem Programm nicht gefangen wird (try - catch fehlt).
 
Das Programm mag dann vielleicht weniger "abstürzen".
Dennoch liegt die Kunst beim excpetion handling zu wissen was man mit einer Exception anfangen soll. Wie man auf einen solchen Fehler reagieren soll und das Programm wieder in einen Zustand überführt, in dem es weiterarbeiten kann.

Wie viele Entwickler schreiben z.B. in Java folgendes?
Code:
    try 
    { 
        // Irgendwas Wildes
    } 
    catch ( Exception e ) 
    { 
        e.printStackTrace();
    }
Als einzige Reaktion fällt denen ein, den StackTrace auszugeben, anstatt einer vernünftigen Fehlermeldung gepaart mit z.B. den neuinitialisieren von irgendwelchen Objekten, damit es nicht fünf Sekunden später zur nächsten Exception kommt, oder dem Wiederholen der fehlgeschlagenen Operation bis es klappt.
 
Der StackTrace wird von Eclipse automatisch reingeschrieben und dann wird es einfach nicht mehr angefasst. Und selber nur catch (Exception e) zu schreiben ist auch nicht grade sinnvoll. In seinem Fall sollte es IOException, FileNotFoundException und glaub noch eine dritte Exception sein um sinnvoll unterscheiden zu koennen.
 
Naja den ganzen Kramm mit dem Exceptions habe ich ja schon.... auf Cfile und CArchive. Von dennen habe ich keine Fehlermeldungen.

Ich habe noch nicht Probiert was CException mir rausspuckt.

Aah ja mein Programm Läuft auf mit der Exception weiter...
 
Nochmal zu meine Frage zurück... Also wenn ich mit CArchive WriteString in eine Datei schreibe bekomme ich als Endergebnis immer eine Datei wo jede Buchstabe mit einen Leerzeichen (NUL) getrennt ist.
mit "<<" Operator habe ich immer auf der erste Position einen Komischen x beliebigen Zeichen.

Mein Projekt ist auf Unicode basierend.

Kennt vielleicht jemand die Lösung dazu?

Danke


ps: CException bringt auch nix
 
Hmm ja... also ich habe das jetzt rausgefunden wie es OHNE LEERSTELLEN Datei unter Unicode schreiben kann.

Code:
void CTest::OnFileSave()
{
	CString tmp = NULL;
	try
	{
		CFile f(m_PathToExportVal+_T("\\bla.bla"), CFile::modeCreate|CFile::modeWrite);
		f.WriteString(ExportString);
		tmp.Format(_T("Speichern erfolgreich in: %s"),(LPCTSTR)f.GetFilePath());
		MessageBox(tmp);

		f.Close();

	}catch(CFileException* fEx)
	{
		fEx->ReportError();
		fEx->Delete();
	}
	catch(CException* e)
	{
		e->ReportError();
		e->Delete();
	}
}

Komischerweise braucht man kein CArchive. Kann jeder Probieren, es funktioniert ;)
 

Ähnliche Themen

Zurück
Oben