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

C语言fread()和fwrite()的用法(附带实例,新手必看)

实际开发中,往往需要对整块数据进行读写,例如,对一个结构体类型变量值进行读写。为此,C语言提供了可实现整块读写功能的 fread() 和 fwrite() 函数。

fread() 函数的语法格式如下:
fread(buffer,size,count,fp);
fread() 函数的功能是,从 fp 指向的文件中读取 count 次,每次读 size 字节,读取的信息保存在 buffer 地址中。

fwrite() 函数的语法格式如下:
fwrite(buffer,size,count,fp);
fwrite() 函数的功能是将 buffer 地址开始的信息输出 count 次,每次写 size 字节到 fp 指向的文件中。

以上两个函数中,各个参数的含义如下:
例如,下面的语句表示从 fp 指向的文件中每次读取两个字节并保存在数组 a 中,连续读取 3 次。
fread(a,2,3,fp);

下面的语句表示将数组 a 中的信息每次输出两个字节到 fp 指向的文件中,连续输出 3 次:
fwrite(a,2,3,fp);

【实例】某企业招聘,经过初复试,筛选出 3 名实习生。输入实习生信息,将信息显示出来。
#include<stdio.h>
#include<process.h>
/* 定义结构体,存储实习生成绩信息 */
struct address_list
{
    char name[10];
    char adr[20];
    char tel[15];
} info[100];

void save(char *name, int n) /* 自定义 save 函数 */
{
    FILE *fp; /* 定义一个指向 FILE 类型结构体的指针变量 */
    int i;
    if((fp = fopen(name, "wb")) == NULL) /* 以只写方式打开指定文件 */
    {
        printf("不能打开文件\n");
        exit(0);
    }
    for(i = 0; i < n; i++)
    {
        if(write(&info[i], sizeof(struct address_list), 1, fp) != 1) /* 将一组数据输出到 fp 指向的文件中 */
            printf("写入有误\n"); /* 如果写入文件不成功,则提示错误 */
    }
    fclose(fp); /* 关闭文件 */
}

void show(char *name, int n) /* 自定义 show 函数 */
{
    int i;
    FILE *fp; /* 定义一个指向 FILE 类型结构体的指针变量 */
    if((fp = fopen(name, "rb")) == NULL) /* 以只读方式打开指定文件 */
    {
        printf("不能打开文件\n");
        exit(0);
    }
    for(i = 0; i < n; i++)
    {
        fread(&info[i], sizeof(struct address_list), 1, fp); /* 从 fp 指向的文件中读取数据存入 score 数组 */
        printf("%15s%20s%20s\n", info[i].name, info[i].adr, info[i].tel);
    }
    fclose(fp); /* 关闭文件 */
}

int main()
{
    int i, n;
    char filename[50];
    printf("一共几名?\n");
    scanf("%d", &n); /* 输入实习生人数 */
    printf("请输入文件路径:\n");
    scanf("%s", filename); /* 输入文件所在路径及名称 */
    printf("请输入姓名,地址,手机号\n");
    for (i = 0; i < n; i++) /* 输入实习生信息 */
    {
        printf("NO%d", i + 1);
        scanf("%s%s%s", info[i].name, info[i].adr, info[i].tel); /* 调用函数 save */
        save(filename, n);
    }
    printf("信息如下:\n");
    show(filename, n); /* 调用函数 show */
}
程序运行结果为:
一共几名?
3
请输入文件路径:
E:\name.txt
请输入姓名,地址,手机号
NO1
Lucy
Changchun
13888888666
NO2
Bill
Shanghai
13526565986
NO3
David
Tianjin
13456987562
信息如下:
Lucy Changchun 13888888666
Bill Shanghai 13526565986
David Tianjin  13456987562

相关文章