首页 > 编程笔记 > C语言笔记 阅读:11

C语言fread()和fwrite()函数的用法(附带实例)

前面介绍了很多 C 语言读写文件的函数,它们的读写方式适用于读写文本文件,例如:
这些读写形式一次只能读写一个数据。在现实中,一个文件包含多组数据,不可能一个一个读写,因此,接下来介绍以数据块的形式读取二进制文件。

用 fread() 函数读取二进制文件是读数据,直接将数据复制出来,没有转换。读的过程中没有什么限制,操作对象可以是一个字符,也可以是一个字符串,还可以是一串数据,不受换行的影响。

fread() 函数的语法如下:
fread(ptr, size, count, fp);
参数说明如下:
它对应的写入函数为 fwrite(),fwrite() 函数的语法如下:
fwrite(ptr,size,count,fp);
参数说明如下:
【实例】创建一个学生成绩二进制文件,然后用数据块的形式读取文件,并显示出来。代码如下:
#include <stdio.h>
#include <stdlib.h>
#define FILESTR "E:\c.dat" //定义文件路径
#define STU_NUM 2 //学生数
 
struct stu{
    char name[10]; //学生名称
    int num; //学生学号
    float Chinese,math,English;
};
 
int main()
{
    FILE *fp;
    struct stu stu1[STU_NUM],stu[STU_NUM]={{"Liao",1,97,86,86},{"Tang",2,86,96,86}};
    int i;
 
    if((fp=fopen(FILESTR,"wb+"))==NULL)
    {
        printf("error: cannot open file!\n");
        exit(0);
    } //用二进制读写形式创建文件
 
    fwrite(stu, sizeof(struct stu), 5, fp); //将stu中的数据写入文件
    rewind(fp); //将文件指针重置到文件开头
    for(i=0;i<STU_NUM;i++)
    {
        fread(&stu1[i], sizeof(struct stu), 1, fp); //将文件的数据进str1中
    }
    for(i=0;i<STU_NUM;i++)
    {
 
        printf("%s %d %f %f %f",stu1[i].name,
        stu1[i].num,stu1[i].Chinese,stu1[i].math,stu1[i].English);
        printf("\n");
    }
    fclose(fp);
 
    return 0;
}
编译运行,结果如下:

Liao 1 97 86 86
Tang 2 86 96 86

其中,sizeof(struct stu) 表示获取结构体数据字节的长度;rewind(fp) 语句的作用是使文件指针指向文件的开始地址,因为文件写入完毕后文件指针是指在文件末尾的,只有使文件指针指向文件开头才能执行接下来的读取操作。

上述例子读文件和写文件用到了不同的方法,如果将它们互换,如下:
fwrite(stu1, sizeof(struct stu), 5, fp);
和下面的语句效果一样:
for(i=0;i<5;i++)
{
    fwrite(&stu1[i], sizeof(struct stu), 1, fp);
}
注意,用数据块形式写的二进制文件不像文本文件一样可以打开查看,二进制文件如果直接用记事本程序打开是乱码。

相关文章