用二进制方式向文件读写一组数据
函数
fread(buffer,size,count,fp);
fwrite(buffer,size,count,fp);
buffer:是一个地址。(起始地址)
对fread来说:用来存放文件读入的数据的存储区的地址;
对fwrite来说:把此地址开始的存储区中的数据向文件输出。
size:要读写的字节数。
count:要读写多少个数据项。(每个数据项长度为size)
fp:FILE类型指针
调用形式
1:fread(f,4,10,fp);
2:
// 定义结构体student 实例
struct student {
char name[20];
int num;
int age;
char addr[20];
} stu[SIZE];
fread(&stu[i], sizeof(struct student), 1, fp);
fwrite(&stu[i], sizeof(struct student), 1, fp);
实例
1:新建一个data_stu.dat文件,用以存储学生信息
/*
Name: block_date_fwrite
Author:Liweidong
Date: 13/07/18 11:30
Description:新建一个data_stu.dat文件,用以存储学生信息
*/
#include <stdio.h>
#define SIZE 10
struct student {
char name[20];
int num;
int age;
char addr[20];
} stu[SIZE];
void main() {
void save(void);
int i;
printf("please enter data of students:\n");
for(i=0; i<SIZE; i++) {
scanf("%s%d%d%s",stu[i].name,&stu[i].num,&stu[i].age,stu[i].addr);
}
save();
}
void save() {
FILE *fp;
int i;
if( !(fp = fopen("data_stu.dat","w"))) {
printf("cannot open the file data_stu.dat!\n");
return;
}
for(i=0; i<SIZE; i++) {
if(fwrite(&stu[i],sizeof(struct student),1,fp) != 1) {
printf("file write error\n");
return;
}
}
fclose(fp);
printf("Successful storage!\n");
}
运行结果:
可再次将data_stu.dat文件中的信息输出,看是否与之前输入的信息一致。见eg2.
2:从data_stu.dat文件中读取学生信息,存储到data1_stu.dat中。
/*
Name:block_date
Author:Liweidong
Date: 13/07/18 16:25
Description: 从data_stu.dat文件中读取学生信息,
存储到data1_stu.dat中
*/
#include <stdio.h>
#define SIZE 10
struct student {
char name[20];
int num;
int age;
char addr[20];
} stu[SIZE];
void main() {
int i;
FILE *fp_read,*fp_write;
if( !(fp_read = fopen("data_stu.dat","rb"))) {
printf("cannot open the file data_stu.dat.dat!\n");
return;
}
if( !(fp_write = fopen("data1_stu.dat","wb"))) {
printf("cannot open the file data1_stu.dat!\n");
return;
}
printf("name\tnum\tage\taddr\n");
for(i=0; i<SIZE; i++) {
if(fread(&stu[i],sizeof(struct student),1,fp_read) != 1) {
printf("file read error\n");
return;
}
printf("%s\t%d\t%d\t%s\n",stu[i].name,stu[i].num,stu[i].age,stu[i].addr);
if(fwrite(&stu[i],sizeof(struct student),1,fp_write) != 1) {
printf("file write error\n");
return;
}
}
printf("Successful storage!\n");
fclose(fp_read);
fclose(fp_write);
}
运行结果
如上图所示,确定数据存储成功。