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.
-
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