Read and Write Record From Binary File in C


#include "stdio.h"
#include "conio.h"


struct student
     {
      int rollno;
      char name[30];
      float per;
     }stud,*ptr,temp;


//Functions


int search(FILE *fp,char sname[30])
{
int record=1,no=1;
struct student stud;
fseek(fp,0L,SEEK_SET);
printf("\n Name : %s",sname);
record=1;
record=fread(&stud,sizeof(stud),1,fp);
while(no)
   {
    if(!strcmp(stud.name,sname))
      {
printf("\n Roll No    = %d",stud.rollno);
printf("\n Name       = %s",stud.name);
printf("\n Percentage = %f",stud.per);
fclose(fp);
return no;
      }
    record=fread(&stud,sizeof(stud),1,fp);
    no++;
    if(record!=1)
      {
      printf("\n Record Not Found...");
      fclose(fp);
      return 0;
      }
    }
}




void main()
{
int i,no,record,flag,pos=0,len;
float p;
FILE *fp;
char sname[30];
clrscr();


//To Write Into File
fp=fopen("D:/student.txt","wb");
printf("\n Enter How Many Student Data You Want to Enter : \n");
scanf("%d",&no);
for(i=0;no>i;i++)
   {
    printf("\n Enter Roll No = ");
    scanf("%d",&stud.rollno);
    printf("\n Enter Name = ");
    scanf("%s",stud.name);
    printf("\n Enter Percentage = ");
    scanf("%f",&p);
    stud.per=p;
    fwrite(&stud,sizeof(stud),1,fp);
   }
fclose(fp);


//To Read From File
fp=fopen("D:/student.txt","rb");
printf("\n Student Data Are as per Follow : \n");
for(i=0;no>i;i++)
   {
    fread(&stud,sizeof(stud),1,fp);
    printf("\n Roll No    = %d",stud.rollno);
    printf("\n Name       = %s",stud.name);
    printf("\n Percentage = %f",stud.per);
   }


//Go Back to BOF
printf("\n Enter Name To Search :");
scanf("%s",sname);
search(fp,sname);
fclose(fp);
getch();
clrscr();


fp=fopen("D:/student.txt","rb");
fseek(fp,0L,SEEK_SET);
printf("\n Enter Name To Replace Record :");
fflush(stdin);
scanf("%s",sname);
len=search(fp,sname);
if(!len)
{
printf("\n Record Not Found");
}
fclose(fp);


fp=fopen("D:/student.txt","r+b");
    fseek(fp,0L,SEEK_SET);
    printf("\n Enter Roll No = ");
    scanf("%d",&temp.rollno);
    printf("\n Enter Name = ");
    scanf("%s",temp.name);
    printf("\n Enter Percentage = ");
    scanf("%f",&p);
    temp.per=p;
    printf("\n Record = %d",--len);
    fseek(fp,sizeof(struct student)*len,SEEK_SET);
    fwrite(&temp,sizeof(struct student),1,fp);
fclose(fp);


getch();
clrscr();


fp=fopen("D:/student.txt","rb");
fseek(fp,0L,SEEK_SET);
printf("\n Student Data Are as per Follow : \n");
flag=1;
flag=fread(&stud,sizeof(stud),1,fp);


for(i=0;flag==1;i++)
   {
    printf("\n Roll No    = %d",stud.rollno);
    printf("\n Name       = %s",stud.name);
    printf("\n Percentage = %f",stud.per);
    flag=fread(&stud,sizeof(stud),1,fp);
   }


fclose(fp);
getch();
}