C语言fread()和fwrite()的用法(附带实例,新手必看)
实际开发中,往往需要对整块数据进行读写,例如,对一个结构体类型变量值进行读写。为此,C语言提供了可实现整块读写功能的 fread() 和 fwrite() 函数。
fread() 函数的语法格式如下:
fwrite() 函数的语法格式如下:
以上两个函数中,各个参数的含义如下:
例如,下面的语句表示从 fp 指向的文件中每次读取两个字节并保存在数组 a 中,连续读取 3 次。
下面的语句表示将数组 a 中的信息每次输出两个字节到 fp 指向的文件中,连续输出 3 次:
【实例】某企业招聘,经过初复试,筛选出 3 名实习生。输入实习生信息,将信息显示出来。
fread() 函数的语法格式如下:
fread(buffer,size,count,fp);fread() 函数的功能是,从 fp 指向的文件中读取 count 次,每次读 size 字节,读取的信息保存在 buffer 地址中。
fwrite() 函数的语法格式如下:
fwrite(buffer,size,count,fp);fwrite() 函数的功能是将 buffer 地址开始的信息输出 count 次,每次写 size 字节到 fp 指向的文件中。
以上两个函数中,各个参数的含义如下:
- 参数 buffer 是一个指针。对 fwrite() 函数来说,是待输出数据的地址(起始地址);对 fread() 函数来说,是待读取数据存放的地址;
- size:要读写的字节数;
- count:要读写多少个 size 字节的数据项;
- fp:文件型指针。
例如,下面的语句表示从 fp 指向的文件中每次读取两个字节并保存在数组 a 中,连续读取 3 次。
fread(a,2,3,fp);
下面的语句表示将数组 a 中的信息每次输出两个字节到 fp 指向的文件中,连续输出 3 次:
fwrite(a,2,3,fp);
【实例】某企业招聘,经过初复试,筛选出 3 名实习生。输入实习生信息,将信息显示出来。
#include<stdio.h> #include<process.h> /* 定义结构体,存储实习生成绩信息 */ struct address_list { char name[10]; char adr[20]; char tel[15]; } info[100]; void save(char *name, int n) /* 自定义 save 函数 */ { FILE *fp; /* 定义一个指向 FILE 类型结构体的指针变量 */ int i; if((fp = fopen(name, "wb")) == NULL) /* 以只写方式打开指定文件 */ { printf("不能打开文件\n"); exit(0); } for(i = 0; i < n; i++) { if(write(&info[i], sizeof(struct address_list), 1, fp) != 1) /* 将一组数据输出到 fp 指向的文件中 */ printf("写入有误\n"); /* 如果写入文件不成功,则提示错误 */ } fclose(fp); /* 关闭文件 */ } void show(char *name, int n) /* 自定义 show 函数 */ { int i; FILE *fp; /* 定义一个指向 FILE 类型结构体的指针变量 */ if((fp = fopen(name, "rb")) == NULL) /* 以只读方式打开指定文件 */ { printf("不能打开文件\n"); exit(0); } for(i = 0; i < n; i++) { fread(&info[i], sizeof(struct address_list), 1, fp); /* 从 fp 指向的文件中读取数据存入 score 数组 */ printf("%15s%20s%20s\n", info[i].name, info[i].adr, info[i].tel); } fclose(fp); /* 关闭文件 */ } int main() { int i, n; char filename[50]; printf("一共几名?\n"); scanf("%d", &n); /* 输入实习生人数 */ printf("请输入文件路径:\n"); scanf("%s", filename); /* 输入文件所在路径及名称 */ printf("请输入姓名,地址,手机号\n"); for (i = 0; i < n; i++) /* 输入实习生信息 */ { printf("NO%d", i + 1); scanf("%s%s%s", info[i].name, info[i].adr, info[i].tel); /* 调用函数 save */ save(filename, n); } printf("信息如下:\n"); show(filename, n); /* 调用函数 show */ }程序运行结果为:
一共几名? 3 请输入文件路径: E:\name.txt 请输入姓名,地址,手机号 NO1 Lucy Changchun 13888888666 NO2 Bill Shanghai 13526565986 NO3 David Tianjin 13456987562 信息如下: Lucy Changchun 13888888666 Bill Shanghai 13526565986 David Tianjin 13456987562