User Tools

Site Tools


cs:c_language:write_and_read_a_binary_file
Return to Home page

Differences

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

Link to this comparison view

cs:c_language:write_and_read_a_binary_file [2019/02/26 14:35]
cs:c_language:write_and_read_a_binary_file [2019/02/26 14:35] (current)
Line 1: Line 1:
 +====== Write and read a binary file (fwrite e fread) ======
 +**Concepts:​**\\
  
 +Functions ''​fwrite''​ and ''​fread''​ for writing and reading a binary file.
 +
 +**Text:**\\
 +After the writing of a vector of structures (the elements of the structure are a vector of characters containing the name of a student, a variable of type ''​unsigned int''​ containing the student identifier and a variable of type ''​float''​ containing the average value of the scores of the exams attended by the student), the program must:
 +  * open in write mode a file with name "''​out.bin''",​ in order to store in the file the vector of structures
 +  * written the file in a binary way by using the function ''​fwrite''​
 +  * close the file
 +  * reopen the file for reading it
 +  * read the file by using the function ''​fread''​ and fill the vector of structures with the read data
 +  * print all the data contained in the vector of structures
 +  * close the file
 +
 +**Solution:​**\\
 +<file C binary_file_fwrite_fread.c>​
 +/* Write and read a binary file (fwrite and fread) */
 +
 +#include <​stdio.h>​
 +#include <​stdlib.h>​
 +#include <​string.h>​
 +
 +#define LEN 50
 +#define N_STUD 2
 +
 +typedef struct stud{
 +  char name[LEN+1];​
 +  unsigned int id;
 +  float average;
 +}stud_t;
 +
 +
 +int main() {
 +  FILE *fp;
 +  stud_t student[N_STUD];​
 +  int i;
 +  char row[LEN+1];
 +  unsigned int n_stud;
 +
 +  strcpy(student[0].name,​ "​Steven"​);​
 +  student[0].id = 120000;
 +  student[0].average = 25.5;
 +
 +  strcpy(student[1].name,​ "​Julia"​);​
 +  student[1].id = 120001;
 +  student[1].average = 28.5;
 +
 +  fp = fopen("​out.bin",​ "​w"​);​ /* Open the file for writing */
 +  if (fp == NULL){
 +    printf("​Error:​ file out.bin cannot be opened\n"​);​
 +    exit(1);
 +  }
 +
 +
 +  /* Write the file */
 +  /* NOTE 2: a binary file sometimes cannot be readable ​
 +     ​correctly in a PC that it is not the one which generates it, 
 +     ​because,​ for instance, integer numbers can be coded with a
 +     ​different number of bytes.
 +  */
 + 
 +  /* Write in binary all the data contained in the structure */
 +  fwrite(student,​ sizeof(stud_t),​ N_STUD, fp); 
 +
 +  /* DIMENSION OF THE GENERATED FILE
 +     The dimension of the generated file will be:
 +     ​n_stud*sizeof(stud_t)
 +     in the case of the computer used to test the program:
 +     2*60 = 120 byte
 +   */
 +  ​
 +  fclose(fp); /* Close the file */
 +
 +
 +  ​
 +  fp = fopen("​out.bin",​ "​r"​);​ /* Open the file for reading */
 +  if (fp == NULL){
 +    printf("​Error:​ file out.bin cannot be opened\n"​);​
 +    exit(1);
 +  }
 +
 +  /* Read the file */
 +  n_stud = 0;
 +  while( fread(&​student[n_stud],​ sizeof(stud_t),​ 1, fp) == 1 ) {
 +    n_stud++;
 +  }
 +
 +  fclose(fp); /* Close the file */
 +
 +  ​
 +  /* Print the read records */
 +  for (i=0; i<​n_stud;​ i++) {
 +    printf("​%s %d %f\n", student[i].name,​ student[i].id,​ student[i].average);​
 +  }
 +
 +
 +  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/cs/c_language/write_and_read_a_binary_file?do=diff&rev2%5B0%5D=&rev2%5B1%5D=1551188114&difftype=sidebyside
/web/htdocs/www.skenz.it/home/data/pages/cs/c_language/write_and_read_a_binary_file.txt ยท Last modified: 2019/02/26 14:35 (external edit)

Privacy Policy