File novizio in c

di il
4 risposte

File novizio in c

Salve a tutti.
Ho appena incominciato a studiare i file in c ed ho una domanda alla quale il libro non mi riesce a rispondere
io ho buttato giu questo semplice programma che mi richiedeva di leggere da file e inserirla in un array:
nt main ()
{

    char buf[]="ciaomarco";
    char ass[10];
    int n;
    FILE *fp;

    fp=fopen("carattere.txt","w");
    if(fp==NULL)
        printf("errore");
    fwrite(buf,sizeof(char),10,fp);
    fclose(fp);
    fp=fopen("carattere.txt","r");
    n=fread(ass,1,10,fp);
    printf("carattere: %s",ass);
    printf("%d caratteri",n);
    fclose(fp);
}
ok cosi mi funziona ma prima avevo fatto una variente di questo codice che era cosi:

nt main ()
{

    char buf[]="ciaomarco";
    char ass[10];
    int n;
    FILE *fp;

    fp=fopen("carattere.txt","w+");
    if(fp==NULL)
        printf("errore");
    fwrite(buf,sizeof(char),10,fp);
    n=fread(ass,1,10,fp);
    printf("carattere: %s",ass);
    printf("%d caratteri",n);
    fclose(fp);
}
E questo non funzionava, non mi scriveva ass a video, perchè? se io ho dato come operatore di file "w+" non dovrei sia scriverlo che leggerlo?
grazie a tutti...

4 Risposte

  • Re: File novizio in c

    Ciao, il problema è che dopo che hai finito di scrivere il file ti trovi alla fine di esso con il tuo "cursore". Quindi non riesci a leggere dall'inizio. Per risolvere puoi utilizzare la funzione fseek oppure anche chiudere e riaprire il file.



    P.S. Era il mio messaggio numero 1000! Si invecchia!
  • Re: File novizio in c

    Nel tuo codice, la fwrite scrive i dati e la fread cerca di leggere i dati che *seguono* quelli appena scritti. Ma non ci sono dei dati dopo quelli che hai scritto prima.

    Devi "riavvolgere il nastro" prima di leggere, devi tornare all'inizio del file.

    Tra le fwrite e la fread aggiungi una

    fseek(fp, 0, SEEK_SET);

    che porta il puntatore del file all'inizio.
  • Re: File novizio in c

    R = apre un file in lettura
    w = crea un file e se esiste lo cancella ricreandolo da zero e ci accede in scrittura
    w+ = uguale a w ma in piu puoi leggere
    r+ = apre un file in lettura e scrittura se non esiste segnala errore e non cancella precedenti caratteri

    Nel tuo caso però l'apertura è eseguita correttamente.
    Devi però ricordare che una volta scritto sul file in cursore avanza e quindi quando andrai a leggere, otterrai il carattere sucessivo a quello scritto.
    Devi quindi riposizionerti all'inizio del file tramite la funzione fseek(), e il bon ton prevede anche un fflush().


    tutti insieme appasionatamente
  • Re: File novizio in c

    Adesso ho capito in pratica devo mandare indietro il filepointer. Thanks
Devi accedere o registrarti per scrivere nel forum
4 risposte