Fehler beim Schreiben in binäre Datei
-
Guten Abend liebe Gemeinde,
also ich sitze nun schon seit geschlagenen 3 Stunden über meinem Programm,
in dem eine Code-Zeile nicht das macht, was ich mir vorgestellt habe.Ich wollte das Schreiben in eine binäre Datei mal testen, deshalb habe ich
mir folgenden Code geschrieben :#include <conio.h> #include <stdio.h> #include <stdlib.h> #include <dir.h> struct Kunde { char kundennr[9]; char nachname[30]; char vorname[25]; } KUNDE[30]; main() { FILE *file; char *dateiname="C:\\Aufgabe\\aufgabe.dat"; int anzahl=0, i=0; if((file=fopen(dateiname, "ab"))!=NULL) { printf("\n%s erfolgreich geoeffnet.\n",dateiname); fclose(file); printf("\n\nWieviele Datensaetze wollen sie eingeben : "); scanf("%i",&anzahl); fflush(stdin); for (i=0; i<anzahl; i++) { printf("\nKunden-Nummer : "); gets(KUNDE[i].kundennr); printf("Nachname des Kunden : "); gets(KUNDE[i].nachname); printf("Vorname des Kunden : "); gets(KUNDE[i].vorname); //HIER IN DER ZEILE STECKT DER FEHLER if ( fwrite(&KUNDE[i], sizeof(&KUNDE[i]), 1, file)!=sizeof(&KUNDE[i])) printf("\nFehler beim Schreiben in die Datei\n"); } } else { printf("\nFehler beim Oeffnen von %s.",dateiname); } fclose(file); getch(); }
Ich bekomme ständig die Fehler-Ausgabe aus der if()-Anweisund angezeigt.
(in Zeile 40)Kann mir bitte jemand auf die Sprünge helfen, wo da mein Fehler ist?
Ich habe schon so ziemlich alles probiert ... leider bis jetzt scheinbar
nicht das Richtige !?Danke im Voraus !
-
Du hast die Datei in Zeile 24 wieder geschlossen.
-
Oh Mann ... wenn ich ran kommen würde, dann würde ich mir jetzt
in den Allerwertesten beißen. Die Zeile ist noch ein Überbleibsel
aus den Anfängen des Programms ...EDIT : Zeile gerade entfernt ... Fehlermeldung bleibt leider
genau die Gleiche ...
-
&KUNDE[i] ist eine Adresse, sizeof(&KUNDE[i]) dementsprechend 4.
fwrite liefert die anzahl der geschriebenen elemente zurueck.
die groesse eines zu schreibenden elements ist hier sizeof(&KUNDE[i]) und die anzahl 1.
der vergleich schlaegt also zurecht fehl.nicht alles in eine zeile stopfen, dann sieht man sowas sofort im debugger.
-
Das stimmt natürlich. Aber ich habe auch schon einiges probiert ...
Kannst du mir denn sagen / schreiben, wie das richtig aussehen müsste ?
-
Habe die Zeile jetzt so abgeändert :
fwrite(KUNDE, sizeof(KUNDE), 1, file);
Nun wurde auch was in die Datei geschrieben, allerdings stimmt der
Inhalt der Datei sicher nicht mit dem überein, wass ich mir vorgestellet
habe, was in der Datei stehen sollte ...
-
Also ich habe den Code jetzt so abgeändert :
for (i=0; i<anzahl; i++) { printf("\nKunden-Nummer : "); gets(KUNDE[i].kundennr); printf("Nachname des Kunden : "); gets(KUNDE[i].nachname); printf("Vorname des Kunden : "); gets(KUNDE[i].vorname); //HIER IN DER ZEILE STECKT DER FEHLER //if ( fwrite(KUNDE, sizeof(KUNDE), 1, file)!=sizeof(KUNDE)) printf("\nFehler beim Schreiben in die Datei\n"); //fwrite(KUNDE, sizeof(KUNDE[i]), 1, file); } fwrite(KUNDE, sizeof(KUNDE[i]), i+1, file);
Kann mir das jemand bestätigen, dass es so richtig ist ? Denn ich möchte
schon ganz gerne meine Ausgabe stimmig haben, bevor ich mich dann an das
Einlesen der Datei mache !?Also ich habe nun zumindest für jeden Datensatz, den ich eingebe, einen
passenden Eintrag in der Datei !?
-
-=The Brain=- schrieb:
Also ich habe den Code jetzt so abgeändert :
for (i=0; i<anzahl; i++) { printf("\nKunden-Nummer : "); gets(KUNDE[i].kundennr); printf("Nachname des Kunden : "); gets(KUNDE[i].nachname); printf("Vorname des Kunden : "); gets(KUNDE[i].vorname); //HIER IN DER ZEILE STECKT DER FEHLER //if ( fwrite(KUNDE, sizeof(KUNDE), 1, file)!=sizeof(KUNDE)) printf("\nFehler beim Schreiben in die Datei\n"); //fwrite(KUNDE, sizeof(KUNDE[i]), 1, file); } fwrite(KUNDE, sizeof(KUNDE[i]), i+1, file);
sicher das dein Programm eine eingegebenen Dateinamen korrekt in die Datei schreibt?
Ich würde es so machen - ohne Gewähr auf Korektheit
for (i=0; i<anzahl; i++) { printf("\nKunden-Nummer : "); gets(KUNDE[i].kundennr); fwrite(KUNDE[i].kundennr, strlen(KUNDE[i].kundennr), MAX_LEN_KUNDENNR, file); printf("Nachname des Kunden : "); gets(KUNDE[i].nachname); fwrite(KUNDE[i].nachname, strlen(KUNDE[i].nachname), MAX_LEN_NACHNAME, file); printf("Vorname des Kunden : "); gets(KUNDE[i].vorname); fwrite(KUNDE[i].vorname, strlen(KUNDE[i].vorname), MAX_LEN_VORNAME, file); }