2017-10-03 9 views
-4

J'essaie de créer un programme d'écriture de base de données binaire en C.Comment créer une base de données en utilisant des structures en C

Problème est que lorsque la base de données est mise à jour, le programme supprime les données précédentes du fichier et stocke uniquement les nouvelles données mises à jour.

Programme:

#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' est une erreur de syntaxe. – melpomene

+0

Le mode Ouvrir 'w' efface le fichier. Si vous voulez ajouter à un fichier, utilisez 'a'. – Barmar

+2

BTW 'fwrite! = 0' est un non-sens – BLUEPIXY

Répondre

0

Le fichier est tronqué lorsque vous utilisez:

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

Pour ouvrir le fichier pour l'écriture sans tronquer, utilisez:

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

Mais cette ne créera pas le fichier s'il n'existe pas, donc vous devez vérifier pour un n erreur et ensuite ouvrir en mode w si elle échoue.

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

Voir How to choose open mode with fopen()?

En outre, puisque vous écrivez un fichier binaire, vous devez utiliser le modificateur b:

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

Il ne fait pas de différence sur Unix, mais ne sur d'autres systèmes d'exploitation, il est donc nécessaire pour la portabilité.

+0

r + a travaillé pour it.but si le fichier n'est pas là alors il montre error.je pense qu'il devrait créer un nouveau fichier à la place. – anmoloo7

+0

J'ai mis à jour la réponse pour montrer comment faire face à cela. – Barmar

+0

Merci Résolu – anmoloo7