it:informatica:linguaggio_c:scrittura_e_lettura_file_binario
Return to Home page
If you found any error, or if you want to partecipate to the editing of this wiki, please contact: admin [at] skenz.it
You can reuse, distribute or modify the content of this page, but you must cite in any document (or webpage) this url: https://www.skenz.it/it/informatica/linguaggio_c/scrittura_e_lettura_file_binario
Scrittura e lettura file binario (fwrite e fread)
Concetti:
Funzioni fwrite
e fread
per la scrittura e la lettura di un file binario.
Testo:
Dopo aver riempito un vettore di strutture (i cui elementi della struttura sono un vettore di caratteri contenente il nome di uno studente, una variabile di tipo unsigned int
contenente la matricola dello studente ed una variabile di tipo float
contenente la sua media):
- Aprire in scrittura un file di nome “
out.bin
” per salvarci i dati contenuti nel vettore di strutture - Scrivere nel file in modo binario, utilizzando la funzione
fwrite
, il contenuto del vettore di strutture precedentemente riempito - Chiudere il file
- Riaprire il file in lettura
- Leggerlo utilizzando la funzione
fread
e riempire con i dati ottenuti il vettore di strutture precedentemente creato - Stampare tutti i dati contenuti nel vettore di strutture
- Chiudere il file
Soluzione:
- file_binario_fwrite_fread.c
/* Scrittura e lettura di file binari (fwrite e fread) */ #include <stdio.h> #include <stdlib.h> #include <string.h> #define LUN 50 #define N_STUD 2 typedef struct stud{ char nome[LUN+1]; unsigned int matricola; float media; }stud_t; int main() { FILE *fp; stud_t studente[N_STUD]; int i; char riga[LUN+1]; unsigned int n_stud; strcpy(studente[0].nome, "Stefano"); studente[0].matricola = 120000; studente[0].media = 25.5; strcpy(studente[1].nome, "Giulia"); studente[1].matricola = 120001; studente[1].media = 28.5; fp = fopen("out.bin", "w"); /* Apertura file in scrittura */ if (fp == NULL){ printf("Errore: impossibile aprire il file out.bin\n"); exit(1); } /* Scrittura del file */ /* NOTA 2: un file binario non e' detto che sia sempre leggibile in modo corretto su una calcolatore differente da quello su cui e' stato generato, perche' ad esempio i numeri interi potrebbero essere codificati su un numero diverso di byte */ /* Scrittura in binario di tutti i record */ fwrite(studente, sizeof(stud_t), N_STUD, fp); /* DIMENSIONE DEL FILE GENERATO La dimensione del file generato sara': n_stud*sizeof(stud_t) nel caso del calcolatore su cui e' stato testato il programma: 2*60 = 120 byte */ fclose(fp); /* Chiusura del file */ fp = fopen("out.bin", "r"); /* Apertura file in lettura */ if (fp == NULL){ printf("Errore: impossibile aprire il file out.bin\n"); exit(1); } /* Lettura del file */ n_stud = 0; while( fread(&studente[n_stud], sizeof(stud_t), 1, fp) == 1 ) { n_stud++; } fclose(fp); /* Chiusura del file */ /* Stampa dei record letti */ for (i=0; i<n_stud; i++) { printf("%s %d %f\n", studente[i].nome, studente[i].matricola, studente[i].media); } return 0; }
If you found any error, or if you want to partecipate to the editing of this wiki, please contact: admin [at] skenz.it
You can reuse, distribute or modify the content of this page, but you must cite in any document (or webpage) this url: https://www.skenz.it/it/informatica/linguaggio_c/scrittura_e_lettura_file_binario
/web/htdocs/www.skenz.it/home/data/pages/it/informatica/linguaggio_c/scrittura_e_lettura_file_binario.txt · Last modified: 2024/04/08 22:35 by 127.0.0.1