CStrings in dateien speichern



  • Hallo!
    Ich versuche Teilnehmerdaten mit Hilfe von fwrite zu speichern un mit fread wieder einzulesen. Nur der CString macht mir Probleme.
    Schreiben:

    FILE *file = NULL; 
    file = fopen("Altersklassen.la", "wb"); 
    int laenge=m_c2.GetCurSel()-m_c1.GetCurSel()+1;
    fwrite(&lange, sizeof(int), 1, file); 
    
    fwrite(&i ,sizeof(int), 1, file);   fwrite(&Klassen[i], Klassen[i].GetLength(), 1, file); //
           fwrite(&Klassenname[i],Klassen[i].GetLength(), 1, file); //
           fwrite(&str2,str2.GetLength(), 1, file); 
           fwrite(&str2, str2.GetLength(), 1, file); 
           fwrite(&Jahrgangv, sizeof(int), 1, file); 
          fwrite(&Jahrgangb, sizeof(int), 1, file);
    

    Lesen:

    FILE *file = NULL; 
    file = fopen("Altersklassen.la", "rb"); 
    int i=0;
    int lange;
    fread(&laenge ,sizeof(int), 1, file); 
    CString str,str2;
    int l,s;
    fread(&l, sizeof(int), 1, file); 
    fread(&str, ??, 1, file);// Hier taucht jetzt ein Problem auf beim auslesen
    fread(&str,??,1,file);
    fread(&str,??, 1, file); 
    fread(&str, ??, 1, file); 
    fread(&l, sizeof(int), 1, file);
    fread(&l, sizeof(int), 1, file);
    fclose(file);
    

    Was soll ich denn bei fread als Größe angeben? Die Größe der Strings ist ja immer verschieden. Beim Schreiben kann ich die Größe einfach auslesen, aber wie mach is das beim Lesen?

    Danke

    MFG

    Hansi



  • Hi,

    versuchs doch am besten mit CFile, damit gehts viel einfacher und du musst dir über irgendwelche Größen keine Gedanken machen. Fallst du Hilfe benötigst, poste hier im Forum und ich helfe dir.


  • Administrator

    Bzw. CFile + CArchive oder CStdioFile. Findet man genügend Infos in der MSDN.

    fread / fwrite und co sind C-Funktionen. Nicht mal C++ und schon gar nicht MFC, woher CString stammt ^^

    Grüssli



  • Hi,

    drabere und mupfel haben recht. mit CFile geht es viel besser.
    du kannst bspw. deine daten zeilenweise auslesen:

    #include <iostream.h>
    #include <fstream.h>
    
    fstream DataFile;
    char zeile[500]; //buffer für 500 zeichen in der zeile
    
    //Datei zum Lesen öffnen
    DataFile.open("Altersklassen.la", ios::in);
    
    //oder Falls schreiben
    //Datei zum Schreiben ab Dateiende öffnen statt "ios::in" "ios::out | ios::app" angeben
    
    //Zeilenweise lesen
    DataFile.getline(zeile, 500);
    
    //daten sind in zeile!
    


  • Danke! habs hinbekommen. Ich schreibe die Daten jetz zeielenweise un lese sie dann auch zeilenweise wieder aus. Ist vll. nicht besonders elegant un verschlüsselt, aber für mich reichts 😃 .

    Also danke nochmals an euch 3.

    MFG

    Hansi



  • Keine Ursache,

    CFile verschlüsselt dir nicht deine Daten, das sollte klar sein. Aber wenn du eine Verschlüsselung brauchst/willst bau sie einfach ein z.b. mit einer Funktion der du den übergibst

    CString Datensatz -> Funktion Verschlüsseln -> CString Datensatz_Verschlüsselt->CFile...

    Verschlüsselungsalgorithmen gibts zu hauf im Internet 🙂

    mfg
    Christian


Anmelden zum Antworten