首先讲解 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; }