环境:vs2013
语言:C语言
时间:2015年3月10日
功能:实现二进制文件的读写实例
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#define FILENAME "d:/studentInfo"
#define COUNT 5
typedef struct
{
char name[10];
short Math;
short Chinese;
short WenZong;
}Student;
//读二进制文件信息
int ReadInfo();
//写入二进制文件信息中
int WriteInfo(Student *stu,int count);
//初始化学生信息
int InitInfo(Student *stu,int count);
int main(void)
{
int resWrite = 0,resRead=0;
Student stu[COUNT];
InitInfo(stu, COUNT);
resWrite = WriteInfo(stu, COUNT);
if (0 == resWrite)
printf("写入成功\n");
else
printf("写入失败\n");
ReadInfo();
system("pause");
return 0;
}
//初始化学生信息
int InitInfo(Student *stu, int count)
{
int res = 0;
if (NULL == stu || count < 0)
{
res = -1;
return res;
}
for (size_t i = 0; i < count; i++)
{
sprintf((stu+i)->name,"LSX%d",i);
(stu + i)->Math = i * 5 + 100;
(stu + i)->Chinese = i * 5 + 80;
(stu + i)->WenZong = i * 5 + 200;
}
return res;
}
//读二进制文件信息
int ReadInfo()
{
int res = 0,res2=0;
FILE*fp = NULL;
Student stu[1];
fp = fopen(FILENAME,"rb"); //读二进制文件,如果不存在,就错误
if (NULL == fp)
{
res = -1;
return res;
}
while (!feof(fp))
{
res2= fread(stu,sizeof(Student),1,fp); //fread函数的返回值很重要,它的返回值就是第三个参数的值,如果不一致就发生错误
if (1 == res2)
{
printf("%s %10d %10d %10d",stu->name,stu->Math,stu->Chinese,stu->WenZong);
}
printf("\n");
}
if (NULL != fp)
fclose(fp);
return res;
}
//写入二进制文件信息中
int WriteInfo(Student * stu,int count)
{
int res = 0,res2=0;
FILE*fp = NULL;
if (NULL == stu || count<0)
{
res = -1;
return res;
}
fp = fopen("d:/studentInfo", "wb"); //写二进制文件,不存在就重新建立文件
if (NULL == fp)
{
res = -1;
return res;
}
for (size_t i = 0; i < count; i++)
{
res2 = fwrite(stu + i, sizeof(Student), 1, fp);// fwrite函数的返回值很重要,它的返回值就是第三个参数的值,如果不一致就发生错误
if (1 != res2)
{
res = -1;
return res;
}
}
if (NULL != fp) //关闭文件
fclose(fp);
return res;
}