美文网首页
文件——二进制 块读写

文件——二进制 块读写

作者: pangdong | 来源:发表于2018-07-14 10:05 被阅读0次

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

    函数

    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

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

    传送门

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

    相关文章

      网友评论

          本文标题:文件——二进制 块读写

          本文链接:https://www.haomeiwen.com/subject/zfpepftx.html