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);
                }
    

Anmelden zum Antworten