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

Both sides previous revision Previous revision
Previous revision
Last revision Both sides next revision
cs:c_language:write_and_read_a_binary_file [2019/02/26 14:35]
cs:c_language:write_and_read_a_binary_file [2021/01/04 12:54]
zioskenz
Line 1: Line 1:
 +====== Write and read a binary file (fwrite and 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=1551188114&rev2%5B1%5D=1609761285&difftype=sidebyside
/web/htdocs/www.skenz.it/home/data/pages/cs/c_language/write_and_read_a_binary_file.txt ยท Last modified: 2021/01/04 17:09 by zioskenz