Betehende Datei editieren?
-
Ich habe ein etwas blödes Problem. Und zwar habe ich eine Binärdatei in einem eigenen Dateiformat. In diesem Format gibt es einen Header(fest Größe, ca 2000 bytes groß) und einen reinen Datenteil. Ich möchte in meinem Programm nun den bestehenden Header vom User verändern lassen. Kein Problem eigentlich: Ich lese erst den Header aus, stelle die Daten in einer GUI zur Verfügung und wenn der User auf Speichern klickt, dann wird er halt gespeichert. Aber genau hier liegt das Problem. Ich mache das im Moment so (C-Pseudcode):
FILE* fpRead = fopen("myfile", "rb"); //Datei öffnen //Hier mit fread() Header auslesen //... fclose(fpRead); //Daten vom User verändern lassen //... //Und jetzt alles abspeichern (Header steht am Dateianfang) FILE* fpWrite = fopen("myfile", "ab"); //Datei zum Anhängen öffnen, da nach dem Header auch noch andere Daten stehen, die erhalten bleiben sollen fseek(fpWrite, 0, SEEK_SET); //Dateicursor auf Dateianfang setzen //Jetzt mit fwrite veränderten Header schreiben //... fclose(fpWrite)
Sehr einfach eigentlich. Nur werden die Änderungen dummerweise irgendwie nicht geschrieben. Wenn ich hingegen die Datei mit "wb" öffne (also so, dass die Datei neu erstellt wird), dann werden die Änderungen geschrieben. Also nehme ich mal an, dass das irgendwie mit dem Flag zum Anhängen was zu tun hat?!
Oder müsste das so theoretisch immer gehen, und stimmt evtl. was mit der Logik zwischen drinnen nicht?
-
Im Append-Modus ("a" bzw. "ab") werden die neuen Daten ALLE ans Dateiende geschrieben, im write-Modus ("w" oder "wb") wird vor dem Schreiben die Datei gelöscht - ist beides nicht das, was du willst, oder?
Aber die Lösung ist ganz einfach, du mußt die Datei im Read/Write-Modus öffnen - "r+b".