Daten in Datei editieren
-
Hallo zusammen.
Ich habe gerade ein kleines Problem. Ich will einen bestimmten Datensatz in einer Datei editieren.
struct bau { char name[30]; char anzahl[5]; int anr; }bauteil[500];
Das sind die Daten die abgespeichert werden. Ich mache eine Abfrage welchen beuteil[i] ich editieren möchte. Danach wird gefragt was geändert werden soll. Also ob Name, Anzahl oder Artikelnummer(anr). Danach will ich die neuen Daten speichern mit der Funktion :
void save(void) { FILE *save = fopen("bauteile.dat","r+b"); if( NULL == save ) { save = fopen("bauteile.dat","w+b"); if( NULL == save ) { fprintf(stderr,"Kann \"bauteile.dat\" nicht öffnen!\n"); return; } } fseek(save, 0, SEEK_CUR); while(fwrite(&bauteil, sizeof(bauteil), 1, save) != 1) { fprintf(stderr, "Fehler bei fwrite...!!!\n"); return; } // FILE-Zeiger wieder frei fclose(save); }
Die neuen Daten lasse ich so eingeben :
cout << "\n\n Bitte geben Sie den neuen Namen ein : "; fgets(bauteil[y].name, sizeof(bauteil[y].name), stdin); save();
Irgendwo habe ich einen Denkfehler. Er schreibt die Daten immer nur in den ersten Datensatz. Ich hoffe das ihr das Problem versteht und ihr mir Helfen könnt.
Vielen Dank schonmal im voraus!
Grischa
-
Wenn du die Datei immer wieder öffnest, dann bist du immer am Dateianfang. Der fseek ändert daran nichts, so wie er dasteht. Müsste eher lauten:
fseek(save, 0, SEEK_END)
-
Das mit dem fopen + mode hast du verstanden?
http://www.cplusplus.com/reference/clibrary/cstdio/fopen/Warum nutzt du nicht die in C++ bevorzugte Variante
http://www.cplusplus.com/reference/iostream/fstream/open/Willst du nur Datensätze anhängen oder Datensätze auch ändern?
-
Ich will bestimmte Datensätze ändern. Dran hängen ist kein Problem. Nur will ich z.B. beim 3. Datensatz den Namen ändern.
-
Noch mal die Frage willst du C oder C++ programmieren?
Hier mal ein Weihnachtspräsent:
file:///C:/Cpp/DB/WEIN/WEIN_XXL/viewtopic-var-t-is-129186-and-postdays-is-0-and-postorder_1.htmlOb da nun Wein oder Bauteil steht ...
-
Hier der brauchbare Link, hoffentlich:
http://www.c-plusplus.net/forum/viewtopic-var-t-is-129186-and-postdays-is-0-and-postorder-is-asc-and-start-is-0.html