Struct speichern?

Das mit den binären Dateien wurde ja schon angesprochen-beim öffnen aufpassen, dass du es nicht als "Textdatei" bekommst.

Was das Einlesen betrifft: Wenn du sowieso schon mit
WriteFile(hFile,&rect ,sizeof(RECT),&dwWritten,0);
reinschreibst, warum liest du es nicht einfach mit einem Readfile wieder aus? :-)
Du liest einfach sizeof(...) Bytes auf die Adresse der Variable.

Was einzelne int etc angeht: Wenn du die Datei schon so begonnen hast, mach auch mit ints und anderen Einzelvariablen dasselbe mit Read/WriteFile und lass die atoi-Geschichte weg.
Sonst hast du wieder unterschiedliche Längen.

Was mehrere Variablen in der selben Datei betrifft: Solange es Sachen sind, die immer gleichviel Bytes haben (so ungefähr alles, was nicht dyn. allokiert ist), kannst du sie einfach hintereinander reinschreiben und wieder rauslesen.

Wenn du nicht alles auslesen willst, sondern nur eine Struktur in der Mitte etc, kann man sich ja zusammenrechnen, am wievielten Byte die anfängt, und erst dort zu lesen beginnen.
 
Was mir daran nicht klar ist:

1) beim öffnen aufpassen, dass du es nicht als "Textdatei" bekommst

Wie mache ich das?
Die einzige Art und Weise, wie ich bisher die Datei gelesen habe, und gleichzeitig das Einzige was ich überhaupt kenne in Sachen Datei lesen, ist wie oben beschrieben:

Code:
DWORD dwFileSize;
HANDLE hFile = CreateFile("config.ini",GENERIC_READ,FILE_SHARE_READ,0,OPEN_EXISTING,0,0);
dwFileSize = GetFileSize(hFile,0);
char buffer[dwFileSize+1];
DWORD dwRead;
ReadFile(hFile,buffer,dwFileSize,&dwRead,0);
CloseHandle(hFile);

2) Du liest einfach sizeof(...) Bytes auf die Adresse der Variable.

Ich fürchte das ist nicht so einfach wie es klingt.
Ich nehme an, dass ich in ReadFile() den Wert dwRead anpassen kann zum lesen der richtigen Stelle, aber wie ich das "auf die Adresse der Variable" lesen soll ist mir Bahnhof.
 
1: Ist so schon In Ordnung
2: Beispiel:

C++:
LOGFONT x;
...
ReadFile(hFile,&x,sizeof(LOGFONT),&dwRead,0);

Genau wie das WriteFile :)
 
Hui, das ist einfacher als ich dachte,
fehlt mir noch noch die Erweiterung auf mehrere Sachen, da bin ich mir nicht sicher, wie das mit dem dwRead pointer funktioniert.

Mal angenommen, ich schreibe in die Datei 3 Sachen, ein RECT, ein int und ein LOGFONT

Code:
WriteFile(hFile,&rect ,sizeof(RECT),&dwWritten,0);
WriteFile(hFile,&MyInt ,sizeof(int),&dwWritten,0);
WriteFile(hFile,&lf,sizeof(LOGFONT),&dwWritten,0);

dann lese ich

Code:
RECT rect;
int MyInt;
LOGFONT lf;

ReadFile(hFile,&rect,sizeof(RECT),&dwRead,0);
ReadFile(hFile,&MyInt,sizeof(int),&dwRead,0);
ReadFile(hFile,&lf,sizeof(LOGFONT),&dwRead,0);

oder muss ich da zwischendrin den pointer versetzen?
 
Zuletzt bearbeitet:
Nein, da musst du nichts versetzen, das ist so in Ordnung.

Den Filepointer ändern ist nur nötig, wenn du zB das Rect und das int nicht einliest und gleich mit der LOGFONT anfangen willst.
Wenn du sowieso alle 3 Variablen brauchst, ist das egal.
 
Dann sage ich ganz herzlich danke für vollständige und verständliche Hilfe, besser hätte ich es mir nicht wünschen können.
 
Zurück