User Tools

Site Tools


it:informatica:linguaggio_c:scrittura_e_lettura_file_binario
Return to Home page

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

it:informatica:linguaggio_c:scrittura_e_lettura_file_binario [2019/02/26 14:35] (current)
Line 1: Line 1:
 +====== 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 C 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;
 +}
 +</​file>​

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?rev=1551188125&do=diff
/web/htdocs/www.skenz.it/home/data/pages/it/informatica/linguaggio_c/scrittura_e_lettura_file_binario.txt ยท Last modified: 2019/02/26 14:35 (external edit)

Privacy Policy