Gestione file in C

di il
7 risposte

Gestione file in C

Salve,
ho un problema con un programma C. Quest'ultimo consiste in un record di struct da memorizzare in un file, quindi inserisco i dati e subito dopo li trascrivo su un file binario con estensione ".dat". Ora, il problema è che inserisce si i dati, ma al momento della visualizzazione parte e non si ferma più, e non capisco il perché. Altra cosa strana: se apro il file generato dal programma, all'interno non c'è niente, è vuoto e la dimensione segnata è 0 KB anche se la funzione per scrivere su file ritorna valore vero, ovvero che la scrittura è andata a buon fine. Chi può aiutarmi? Allego il codice qui di seguito:
#include <stdio.h>

#define USER_FILE "Village.dat"

FILE *fp;

typedef struct{
    int g;
    int m;
    int a;
}date;

typedef struct{
    char surname[20];
    char name[20];
    date d;
}dwell;

dwell village;

void write_to_file();
void print_file();

int main(){
    fp=fopen("Village.dat","wb");

    write_to_file();
    fclose(fp);

    fp=fopen("Village.dat","wb");

    print_file();
    fclose(fp);

    return 0;
}

void write_to_file(){
    int r;

    do{
        printf("Cognome: ");
        scanf("%s",village.surname);

        printf("Nome: ");
        scanf("%s",village.name);

        printf("Data di nascita[gg/mm/aa]: ");
        scanf("%d %d %d",&village.d.g,&village.d.m,&village.d.a);

        fwrite(&village,sizeof(dwell),1,fp);

        printf("Finito l'inserimento dei dati? [1:SI/0:NO]");
        scanf("%d",&r);
    }while(!r);

    return;
}

void print_file(){
    printf("Lista abitanti\n");

    fread(&village,sizeof(dwell),1,fp);

    while(!feof(fp)){
        printf("%-25s\t",village.surname);
        printf("%-25s\t",village.name);
        printf("%d/%d/%d",village.d.g,village.d.m,village.d.a);

        fread(&village,sizeof(dwell),1,fp);
    }

    return;
}

7 Risposte

  • Re: Gestione file in C

    Fp=fopen("Village.dat","wb");

    write_to_file();
    fclose(fp);

    fp=fopen("Village.dat","wb");



    stai riaprendo il file in scrittura cosi, ti cancella il file vecchio e te ne cre uno nuovo...

    per il resto non ho guardato, ma già questo è un errore grossolano...
  • Re: Gestione file in C

    Quindi lo apro prima di operarci e lo chiudo una volta finite tutte le operazioni relative a quel file? Oppure per stampare lo riapro in lettura?
  • Re: Gestione file in C

    Per stampare?
  • Re: Gestione file in C

    oregon ha scritto:


    Per stampare?
    Credo voglia dire "stampare a video".

    In realtà stampi 2 volte... la prima sul File, la seconda a video.
    Ovviamente se devi "leggere" i dati su un file , esso dovrebbe essere aperto in lettura "rb".
  • Re: Gestione file in C

    Si, intendevo quello. Ho provato ad aprire in scrittura, scrivere i dati e chiudere. Poi ho riaperto il file, ma in lettura ed ho stampato. Sembra funzionare. E' così la procedura correttta?
  • Re: Gestione file in C

    Se vuoi prima "scrivere" e poi "leggere", sì, si fa proprio così.
  • Re: Gestione file in C

    Ok, grazie a tutti e due. Perdonatemi, ma è la prima volta che opero con i file, ce li ha spiegati oggi a scuola la prof.
Devi accedere o registrarti per scrivere nel forum
7 risposte