首先讲解 c 语言中文件操作的两个关键函数:fread()、fwrite()
1. fread( buffer , size , count , fp)
该函数实现从 fp 所指的文件中读入 count 次,每次读 size 字节,读入的信息存在 buffer 中。
2. fwrite( buffer , size ,count , fp)
该函数实现将 buffer 地址开始的信息,输出 count 次,每次写 size 字节到 fp所指的文件中。
接下俩看程序实例:
我们首先定义一个学生类型的结构体,通过键盘输入学生的基本信息,保存到指定磁盘文件中,输入全部信息后,我们将保存在磁盘文件中的信息读出并显示在屏幕上。
/*
成块读写操作
核心通过函数fwrite()函数和fread()函数实现
本程序实现将多组块数据写入文件,之后从文件中读出
*/
#include <stdio.h>
#include <stdlib.h>
//定义结构体类型数组
struct student_score{
char name[10];
int num;
int China;
int Math;
int English;
}score[100];
//函数save()将输入的数据输出到指定的磁盘文件中
//name指向文件名 n表示信息个数
void save(char * name,int n){
FILE * fp;
int i;
if((fp=fopen(name,"wb"))==NULL){ //以只写方式打开指定文件
printf("cannot open file\n");
exit(0);
}
for(i=0;i<n;++i){
//将一组数据输出到fp所指向的文件中
if(fwrite(&score[i],sizeof(struct student_score),1,fp)!=1){
printf("file write error\n");
}
}
fclose(fp); //关闭文件
}
//函数show()从指定的文件中读入一组数据并显示在屏幕上
//name指向文件名,n表示信息个数
void show(char * name,int n){
int i;
FILE * fp;
if((fp=fopen(name,"rb"))==NULL){ //若打开文件失败
printf("cannot open file\n");
exit(0);
}
for(i=0;i<n;++i){
//从fp所指文件中读入数据存到数组score中
fread(&score[i],sizeof(struct student_score),1,fp);
printf("%-10s%4d%4d%4d%4d\n",score[i].name,score[i].num,score[i].China,score[i].Math,score[i].English);
}
fclose(fp);
}
int main()
{
int i,n;
char filename[50];
printf("How many students in your class ? \n");
scanf("%d",&n);
printf("Please input the file name :\n");
scanf("%s",filename);
printf("Please input name, number, China, Math, English : \n");
for(i=0;i<n;++i){
printf("No%d\n",i+1);
scanf("%s%d%d%d%d",score[i].name,&score[i].num,&score[i].China,&score[i].Math,&score[i].English);
save(filename,n); //调用save()函数将输入的数据保存到文件
}
show(filename,n); //调用show()函数显示学生信息
return 0;
}