CFile-Klasse schreiben



  • hi,

    wollte mir einmal ansehen wie man mit der CFile-Klasse Dateien erzeugen kann. Dabei bin ich aber auf ein Problem gestoßen (betrifft vermutlich ASCII <-> UNICODE). Ich wollte nämlich einen CString haben, den ich dann ausgebe:

    oFile.Open(strFilename, CFile::modeCreate | CFile::modeWrite, NULL);
    CString strLine("");
    strLine = _T("TestString");
    oFile.Write(strLine. 10);
    

    Ich habe einfach mal die wichtigen Programmteile zusammenkopiert. Jetzt zum Problem: Die Datei sieht dann nämlich so aus: "T e s t S "

    Mit freundlichem Gruß,
    daniel



  • Erstmal ist da ein Fehler: oFile.Write(strLine. 10); Da ist ein Punkt und kein Komma.. ich würde es so machen:

    CString strLine = _T("Teststring");
    CStdioFile file(_T("C:\\test.txt"), CFile::modeCreate | CFile::modeWrite);
    file.WriteString(strLine);
    file.Close();//nicht unbedingt nötig, wird automatisch aufgerufen, wenn Gültigkeitsbereich verlassen wird.
    


  • Erstmal ist da ein Fehler: oFile.Write(strLine. 10); Da ist ein Punkt und kein Komma.. ich würde es so machen:

    CString strLine = _T("Teststring");
    CStdioFile file(_T("C:\\test.txt"), CFile::modeCreate | CFile::modeWrite);
    file.WriteString(strLine);
    file.Close();//nicht unbedingt nötig, wird automatisch aufgerufen, wenn Gültigkeitsbereich verlassen wird.
    


  • ach' sorry also zu dem Fehler. sollte eigentlich so sein. Ich meine funktioniert ja alles einwandfrei. nur schreibt er in das file immer noch ein leerzeichen vornehin.
    die fehlerhafte zeile sieht eigentlich so aus:

    oFile.Write(strLine.GetBuffer(), 10);
    


  • ja, also danke nochmal ...

    also interessanterweise, wenn ich ein CStdioFile nehme und den CString.GetBuffer() dann mit Write in die Datei schreibe, habe ich immer so Leerzeichen dazwischen "T e s t ", wenn ich jedoch WriteString verwende schreibt er mir keine. "Test" - hat das mit Unicode zu tun- oder woran kann das liegen? - kann man mit write das selbe ergebnis erzielen?



  • natürlich hat das mit Unicode zu tun.
    Wenn Dein Projekt Unicode ist, dann wird auch (per default) Unicode in die Datei geschrieben.
    Die meisten Editoren erkennen, das aber leider nicht und zeigen dann anstellen von NUL, das Leerzeichen an.

    Wenn Du CFile verwendest, dann ist dies ein "binäres" Schreiben. Also es wird genau das rausgeschrieben, was Du ihm sagst.

    Das CStdioFile schreibt hingegen Texte raus. Und per default wird hier der Text als ANSI rausgeschrieben.



  • Siehe auch:
    How to write Textfiles with encoding in MFC
    http://blog.kalmbachnet.de/?postid=105



  • oh, sorry, das mit unicode hab ich überlesen.. hätt ich sonst auch so erklärt... 😉


Anmelden zum Antworten