Speichern und lesen in txt Datei



  • Hallo,

    Mein C++ Wissen ist veraltet und überschaubar 🙂

    Für meine Masterthesis muss ich dennoch etwas programmieren und hänge an einer Stelle fest:

    Ich schaffe es Daten in eine txt-Datei zu exportieren:

    HANDLE hFile = CreateFile(pfad, GENERIC_WRITE, FILE_SHARE_READ, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
    	CFile datei(hFile);
    	long int dateilaenge = outputCString.GetLength() * 2;						// KEINE AHNUNG WARUM 2 ABER SONST KLAPPT ES NICHT
    	datei.Write(outputCString, dateilaenge);
    	datei.Close();
    

    Auch das einlesen von txt-Dateien klappt.

    CFile cfile;
    	cfile.Open(m_FileName, CFile::modeRead);
    	cfile.SeekToBegin();
    
    	char startBufRead[8] = { 0 };
    	cfile.Read(startBufRead, 8);
    	startBufRead;
    

    Aber nur wenn ich per Hand eine txt-Datei erstelle. Die von meiner Software erstellten txt-Dateien geben nur "unfug" wieder. Wenn ich den kompletten Inhalt aus der erstellten txt-Datei in die neue reinkopiere, dann klappt es auch.

    Würde mich freuen, wenn jemand mir helfen könnte.
    Gruß Thomas

    P.s.: Ich habe bereits das Internet zweimal durchgelesen



  • Sicher dass das Encoding stimmt?
    Vermutlich is CString Unicode, aber das kann man nicht einfach in ein char array einlesen ohne dass es seltsam aussieht.



  • Habe ich das richtig verstanden: "Weil ich mit CString schreibe aber mit char auslese, könnte es zu dem Problem kommen?"

    Was ist also die Lösung? Ich habe noch keine Möglichkeit gesehen, mit CString zu lesen, nur zu schreiben...

    Danke für die schnelle Antwort.



  • So sollte es gehen:

    CString strWrite = CString(L"lalala");
    CFile fileWrite(L"M:\\test.txt", CFile::modeWrite | CFile::modeCreate);
    fileWrite.Write(strWrite,  strWrite.GetLength() * sizeof(TCHAR));
    fileWrite.Close();
    
    CString strRead;
    CFile fileRead(L"M:\\test.txt", CFile::modeRead); //open file
    UINT readSize = (UINT)fileRead.GetLength(); // get file length in bytes
    PTCHAR readBuffer = strRead.GetBuffer(readSize + sizeof(TCHAR)); //keep in mind to add bytes for terminating 0
    UINT bytesRead = fileRead.Read(readBuffer, readSize);
    readBuffer[readSize / sizeof(TCHAR)] = 0; //add terminating 0
    strRead.ReleaseBuffer(bytesRead);
    


  • Danke Danke Danke...

    Jetzt funktioniert es!

    (Jetzt geht es halt anders herum nicht mehr: "Also eine selbst erstellte txt-Datei. Aber für mich ist es so super!")

    Nochmal Danke
    LG
    Thomas



  • Doch du kannst auch selbsterstellte Textdateien lesen. Du musst halt das Encoding festlegen, das Default bei MFC scheint "UCS-2 LE without BOM" zu sein. Die meisten Editoren haben aber ASCII/UTF-8 als Standard. 😉


Log in to reply