2017-10-03 9 views
-4

Ich versuche, binäre Datenbank schreiben Programm in C zu erstellen.So erstellen Sie eine Datenbank mit Strukturen in C

Problem ist, dass wenn die Datenbank aktualisiert wird das Programm vorherige Daten der Datei löscht und nur neue aktualisierte Daten speichert.

Programm:

#include <stdio.h> 
int main(){ 

    struct STUINFO { char fname[30], lname[30], year[5], batchno[30];}; 
    int id, s, roll; 
    FILE *outfile; 

    // open file for writing 

    if (outfile = fopen ("stuinfo.bin", "w") == NULL) 
    { 
     fprintf(stderr, "\nError opening file\n"); 
     return (-1); 
    } 
    printf("\nEnter Nine Digit Enrollment no. :\n"); 
    scanf("%d", &roll); 
    id = roll - 100000000; 
    if (id < 0) { 
     printf("Please Enter Valid Nine Digit no.\n"); 
     return -2; 
     } 

    struct STUINFO output; 
    printf("Enter First Name :\n"); 
    scanf("%s", output.fname); 
    printf("Enter Last Name :\n"); 
    scanf("%s", output.lname); 
    printf("Enter Year of Semester :\n"); 
    scanf("%s", output.year); 
    printf("Enter Batch no. :\n"); 
    scanf("%s", output.batchno); 

    s = sizeof(struct STUINFO); 
    fseek(outfile, +id*s, SEEK_CUR); 
    // write struct to file 

    if(fwrite (&output, sizeof(struct STUINFO), 1, outfile) != 0) 
     printf("contents to file written successfully !\n"); 
    else 
     printf("error writing file !\n"); 

    return 0; 
} 
+2

'include stdio.h' ist ein Syntaxfehler. – melpomene

+0

Der offene Modus 'w' löscht die Datei. Wenn Sie an eine Datei anhängen möchten, verwenden Sie 'a'. – Barmar

+2

BTW 'fwrite! = 0' ist Unsinn – BLUEPIXY

Antwort

0

Die Datei abgeschnitten wird, wenn Sie verwenden:

fopen ("stuinfo.bin", "w"); 

die Datei ohne zu Kürzen, zum Schreiben Gebrauch zu öffnen:

fopen ("stuinfo.bin", "r+"); 

Aber diese Die Datei wird nicht erstellt, wenn sie nicht existiert. Sie müssen also nach einem suchen n Fehler und öffnen Sie dann in w Modus, wenn es fehlschlägt.

if ((outfile = fopen("stuinfo.bin", "r+") == 0) { 
    outfile = fopen("stuinfo.bin", "w"); 
} 

Siehe How to choose open mode with fopen()?

Auch da Sie eine Binärdatei schreiben, sollten Sie den b Modifikator:

fopen ("stuinfo.bin", "rb+"); 

Es macht keinen Unterschied auf Unix, aber tut auf anderen Betriebssystemen, so ist es für die Portabilität notwendig.

+0

r + arbeitete für it.but, wenn Datei nicht dort ist, dann zeigt es error.i denke, dass es neue Akte stattdessen verursachen sollte. – anmoloo7

+0

Ich habe die Antwort aktualisiert, um zu zeigen, wie damit umzugehen ist. – Barmar

+0

Danke Gelöst es – anmoloo7

Verwandte Themen