文件——二进制 块读写

2018-07-14  本文已影响0人  pangdong

用二进制方式向文件读写一组数据

函数

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");
}
运行结果:
运行结果1

可再次将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);
}

运行结果

运行结果2

如上图所示,确定数据存储成功。

传送门

文件:字符形式输入输出
文件:字符串输入输出
文件:随机读写

上一篇下一篇

猜你喜欢

热点阅读