新手使用fwrite和fread一点小知识

fwrite()和fread()的作用是以二进制的形式在文件中写入/读出数据(***.dat),他们两个总是组合在一起使用。而fscanf()和fprintf()则是另一对组合,用于读取指定文本文件(***.txt)中的数据(数值or字符串)

注意!fwrite写入的内容只能用fread才能读出,因为他们都是以二进制的形式写入的,fscanf和fprintf同理。fwrite写入的数据,以记事本方式打开时是乱码,因为记事本文档不能打开二进制文件

fopen
函数原型:
FILE *fopen(const char *filename,const char *mode);
filename:要打开的文件名称
mode:文件访问模式
文件顺利打开后,指向该流的文件指针就会被返回。如果打开失败则会返回NULL。一般而言,在fopen()后会做错误判断及处理。
mode参数
r 只读打开一个文本文件,只允许读数据

w 只写打开或建立一个文本文件,只允许写数据

at 追加打开一个文本文件,并在文件末尾写数据

rb 只读打开一个二进制文件,只允许读数据

wb 只写打开或建立一个二进制文件,只允许写数据

ab  追加打开一个二进制文件,并在文件末尾写数据

rt+ 读写打开一个文本文件,允许读和写

wt+ 读写打开或建立一个文本文件,允许读写

at+ 读写打开一个文本文件,允许读,或在文件末追加数据

rb+  读写打开一个二进制文件,允许读和写

wb+ 读写打开或建立一个二进制文件,允许读和写

ab+ 读写打开一个二进制文件,允许读或在文件末追加数据

fwrite()函数
原型:size_t fwrite(const void *buffer,size_t size,size_t count,FILE *stream)
buffer:指向要被写入的元素数组指针
size:要写入的每个元素的大小,以字节为单位。
count :写入的数据项个数,大小为size字节.
stream:指向FILE对象的指针
返回实际写入的数据项个数count。

fread()函数
原型:size_t fread(const void *buffer,size_t size,size_t count,FILE *stream)
buffer:指向要被读出的元素数组指针
size:要读出的每个元素的大小,以字节为单位。
count :读出的数据项个数,大小为size字节.
stream:指向FILE对象的指针

在日常的使用中,如果每次都采用文件的顺序读写,那么指针必须从文件头开始,逐步移动到需要读写的位置,十分不方便,因此在通常也使用fseek()进行文件的随机读写

调用形式:fseek(FILE *stream,long offset,int fromwhere)
fromwhere的值表面了起始点的位置

标识符号 数字表示 起始点
SEET -SET 0 文件首
SEEK-CUR 1 当前位置
SEEK-END 2 文件末尾

演示代码

#include<iostream>
//#include<fstream>
#define MAX_SIZE 20
using namespace std;
struct St
{
    char name[10];
    int num;
    int age;
}Stud[MAX_SIZE];

int main()
{
    int i;
    FILE *fp;
    if((fp=fopen("data.txt","r"))==NULL)
    {
        cout<<"can't open the file";
        exit(0);
    }
    for(int i=0;i<MAX_SIZE;i++)
    {
        fseek(fp,i*sizeof(struct St),0);
        fread(&Stud[i],sizeof(struct St),1,fp);
        cout<<Stud[i].name<<"\t"<<Stud[i].age<<"\t"<<Stud[i].num<<"\n";
    }
    return 0;
}
  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值