首页 > 编程笔记

C语言fwrite()函数:以数据块形式写入文件

C语言 fwrite() 函数用来将内存中的数据以“二进制数据块”的形式写入到二进制文件中。

二进制文件以“二进制数据块”为单位进行数据的读写操作。所谓“二进制数据块”就是指在内存中连续存放的具有若干字节长度的二进制数据,如整型数据、实型数据或结构体类型数据等,数据块输入/输出函数对于存取结构体类型的数据尤为方便。

fwrite() 函数位于 <stdio.h> 头文件中,它的一般使用格式如下:

fwrite(buf,size,count,文件指针);

格式说明:
这个函数的参数较多,要注意理解每个参数的含义。

功能:从以 buf 为首地址的内存中取出 count 个数据块(每个数据块为 size 个字节),写入“文件指针”指定的文件中。调用成功,该函数返回实际写入的数据块的个数;出错时返回0值。

示例

使用 fwrite() 函数和 fread() 函数对 www.weixueyuan.net.bin 文件进行写入和读取操作。代码如下:
#include "stdio.h"
#include "stdlib.h"
int main()
{
    FILE *fp;
    struct student    /*定义结构体数组并初始化*/
    {
        char num[8];
        int score;
    }stud[]={{"2019101",86},{"2019102",60},{"2019103",94},{"2019104",76},{"2019105",50}},stud1[5];
    int i;              
    if((fp=fopen("www.weixueyuan.net.bin","wb+"))==0)    /*以读写方式新建并打开文件www.weixueyuan.net.bin,测试是否成功*/
    {
        printf("不能打开文件\n");
        exit(0);
    }
    for(i=0;i<5;i++)
        fwrite(&stud[i],sizeof(struct student),1,fp); /*向fp指向的文件中写入数据*/
    rewind(fp);                /*重置文件位置指针于文件开始处,以便读取文件*/
    printf("学号  成绩\n");            /*在屏幕上输出提示信息*/
    i=0;
    while(!feof(fp))        /*循环读取文件中的数据,直到检测到文件结束标志*/
    {
        fread(&stud1[i],sizeof(struct student),1,fp); /*读取fp指向的文件中的数据并写入结构体数组stud1中*/
        printf("%s  %d\n",stud1[i].num,stud1[i].score);
    }                        /*向屏幕上输出结构体数组stud1中的数据*/
    fclose(fp);    /*关闭文件*/
}
运行结果:

学号  成绩
2019101  86
2019102  60
2019103  94
2019104  76
2019105  50
2019105  50

本程序中定义了两个结构体数组 stud 和 stud1,并对 stud 进行了初始化。以读写方式新建并打开二进制文件 www.weixueyuan.net.bin。

利用 for 循环语句把初始化过的结构体数组 stud 中的数据写入文件 "www.weixueyuan.net.bin" 中,写数据结束后文件指针指向文件的结尾处。

由于后面还要从文件中读取数据,所以需要重置文件指针于文件开头处,这里使用了 rewind() 函数重置文件指针读写位置,最后利用 while 循环语句把文件 "www.weixueyuan.net.bin" 中的数据写入结构体数组 stud1 中,并在屏幕上输出。

二进制数据文件不能用一般的软件打开查看其中的内容,只能通过程序读出内容进行查看。

优秀文章