C语言fread()和fwrite()函数的用法(附带实例)
前面介绍了很多 C 语言读写文件的函数,它们的读写方式适用于读写文本文件,例如:
这些读写形式一次只能读写一个数据。在现实中,一个文件包含多组数据,不可能一个一个读写,因此,接下来介绍以数据块的形式读取二进制文件。
用 fread() 函数读取二进制文件是读数据,直接将数据复制出来,没有转换。读的过程中没有什么限制,操作对象可以是一个字符,也可以是一个字符串,还可以是一串数据,不受换行的影响。
fread() 函数的语法如下:
它对应的写入函数为 fwrite(),fwrite() 函数的语法如下:
【实例】创建一个学生成绩二进制文件,然后用数据块的形式读取文件,并显示出来。代码如下:
上述例子读文件和写文件用到了不同的方法,如果将它们互换,如下:
	
	
- fgetc()/fputc() 以字符形式读写,一次读写一个字符;
- fgets()/fputs() 以字符串形式读写,一次读写一个字符串;
- fscanf()/fprintf() 以格式化形式读写,一次读写一个数据。
这些读写形式一次只能读写一个数据。在现实中,一个文件包含多组数据,不可能一个一个读写,因此,接下来介绍以数据块的形式读取二进制文件。
用 fread() 函数读取二进制文件是读数据,直接将数据复制出来,没有转换。读的过程中没有什么限制,操作对象可以是一个字符,也可以是一个字符串,还可以是一串数据,不受换行的影响。
fread() 函数的语法如下:
fread(ptr, size, count, fp);参数说明如下:
- ptr:存储读取的文件数据的地址;
- size:数据块的字节数;
- count:数据块的个数;
- fp:文件指针。
它对应的写入函数为 fwrite(),fwrite() 函数的语法如下:
fwrite(ptr,size,count,fp);参数说明如下:
- ptr:要写入的数据的地址;
- 参数 size、count、fp 的作用跟 fread() 函数的一样。
【实例】创建一个学生成绩二进制文件,然后用数据块的形式读取文件,并显示出来。代码如下:
#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
上述例子读文件和写文件用到了不同的方法,如果将它们互换,如下:
fwrite(stu1, sizeof(struct stu), 5, fp);和下面的语句效果一样:
for(i=0;i<5;i++)
{
    fwrite(&stu1[i], sizeof(struct stu), 1, fp);
}
注意,用数据块形式写的二进制文件不像文本文件一样可以打开查看,二进制文件如果直接用记事本程序打开是乱码。 
	 ICP备案:
 ICP备案: 公安联网备案:
 公安联网备案: