CString in Datei speichern?



  • Hallo Forum,
    ich kann einen CString nicht richtig in eine Datei speichern, bzw. er wird nicht komplett gespeichert, der String wird abgeschnitten???
    Erst lese ich eine aus, geht auch, und dann wird der Inhalt ergenzt um weiteren Text und alles zusammen wieder in eine andere neue Datei gespeichert, dabei hab
    ich Problem das die Formatierung nicht mitgespeichert wird, also Zeilenumbrüche, und nicht der ganze CString Inhalt, der wird einfach abgeschnitten!
    Hier der code:

    [cpp]
    	char acBuff[5000];
    	// lesen
    	while(0 != (iReadBytes = fileTemplate.Read(acBuff, 4999)) )
    	{
    		acBuff[iReadBytes] = '\0';
    		csContent += acBuff;
    		iTotalReadBytes += iReadBytes;
    	}
    
    	// hier z.B. den Inhalt ändern:
    	csContent.Replace(PLATZHALTER, csNeuerInhalt);
    
    	// pFile ist die neue Datei:
    	pFile.Write(csContent, csContent.GetLength());
    
    	pFile.Close();
    
    [/cpp]
    

    In der neuen Datei ist jetzt der geänderte Inhalt, aber der wird abgeschnitten, und die "\n" werden nicht mitgespeichert,
    die jenigen die ich ausgelesen habe(die Vorlagedatei, ihr Format wird beibehalten und
    auch wieder zurückgeschrieben) aber schon! 😕
    Wie gehts richtig, jemand einen Tipp 🙂

    mfg
    pixel


  • Administrator

    Also am einfachsten würde es meiner Meinung nach folgendermassen gehen:

    CFile File;
    
    // File öffnen
    File.Open("Pfad", CFile::modeCreate | CFile::modeWrite);
    
    // CArchive zum File erstellen
    CArchive ar(&File, CArchive::store);
    
    // Wert initialisieren
    CString str = _T("bla bla bla \n \\");
    
    // Wert speichern
    ar << str;
    
    // Archive schliessen
    ar.Close();
    
    // File schliessen
    File.Close();
    

    Geht auch mit lesen, dann einfach ein paar dinge ändern. Aber kannst alles in der MSDN nachlesen, einfach nach CFile und CArchive suchen.
    Oder brauchst du was anderes?
    Grüssli



  • char acBuff[5000];
        // lesen
        while(0 != (iReadBytes = fileTemplate.Read(acBuff, 4999)) )
        {
            csContent += acBuff;
            iTotalReadBytes += iReadBytes;
        }
    
        acBuff[iReadBytes] = '\0';
    
        // hier z.B. den Inhalt ändern:
        csContent.Replace(PLATZHALTER, csNeuerInhalt);
    
        // Hier nochmal den CString ausgeben lassen und prüfen ob der Wert korrekt ist.
        // pFile ist die neue Datei:
        pFile.Write(csContent, csContent.GetLength());
    
        pFile.Close();
    


  • Hallo,
    danke für eure Antworten, beide werden genommen, ich werde über das Ergebniss berichten! 🙂

    Also, was die Formatierung angeht, ich lese aus einer Datei raus, und schreibe in eine neue zurück, das was ich gelesen habe wird wieder genau so zurückgeschrieben, nur der neue inhalt, den ich erstellt habe wird nicht so geschrieben wie ich das mir vorgestellt habe, 🙂 also ganz konkret gehts um das:

    CString csStr = L"</tr>\n"; // </tr> wird geschrieben aber der Zeilenumbruch fehlt,
    die Strings werden aneinander gereiht in einen riesigen String/Zeile!

    grüsse
    pixel


  • Administrator

    Ehm dass </tr> sieht so aus als wenn du möchtest ein Html File kreieren. Also ich kann ja jetzt völlig daneben liegen, aber wenn du ein Html File erstellen willst, dann schau dir in der MSDN doch mal "CHtmlGen" an. Ist eine Klasse um ein Html zu erstellen.

    Grüssli



  • Hallo,
    stimmt, es soll eine Html Datei sein 🙂 danke für den Hinweis! 🙂

    Grüsse
    pixel



  • Hallo,
    ich ändere CString in string und schreibe sie einfach auf eine Datei mit fstream \n dann mit endl.
    ich erstelle xml Dateien immer so....geht gut.

    Beispiel für CString in string:

    CString CS_text="bonbon";
    LPCSTR temp;
    temp= CS_text;
    string str_text = temp;
    

    ich kann temp direkt auf Datei schreiben oder str_text.
    str_text hat halt den Vorteil, die Funktionen von string zu benutzen wie size oder substr....


Log in to reply