What is the proper method of opening a file for writing as binary file?

cs:c_language:write_and_read_a_binary_file

Return to Home page

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

Video solution:
Video with the explanation of the solution:

Solution:

binary_file_fwrite_fread.c
/* Write and read a binary file [fwrite and fread] */
 
#include 
#include 
#include 
 
#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

Chủ Đề