c语言中对二进制文件的操作函数

本文详细介绍了二进制文件的读写方法,包括fopen、fread、fwrite、fclose等函数的使用,以及如何使用fseek和ftell进行文件定位。同时,对比了文本文件和二进制文件的区别,提供了具体的示例代码。

对文本文件的读写参考该文。

1、前言

文件按数据在文件中的存储形式,分为文本文件,即文件中的字符都是以ASCII码的形式存储;

如3.14 以文本文件形式存储,每个字符占一个字节,共占4个字节;

二进制文件,是将数据按其在内存中的存储形式(二进制码)的形式存储的。

如3.14以二进制文件存储,用float类型占4个字节,用double类型占8个字节。

本文讨论以二进制文件形式存储的各个函数。以文本形式存储文件参见该文

键盘是标准输入文件:stdin

显示器是标准输出文件:stdout

标准错误文件:stderr

二进制文件的打开,关闭与文本文件的打开、关闭类似,参照该文

打开读/写关闭
fopen()fread()fclose()
 fwrite() 

2、判断文件是否结束

方法一:使用feof(文件指针)函数,用来判断文件是否结束  //文本文件和二进制文件都可用

返回值为1,文件结束;

返回值为0,文件没有结束。

方法二:判断EOF(-1)标志 //仅适用于文本文件

因为文本文件中,数据是以ASCII码值形式存放的,而ASCII码值的范围是0-255,不会等于-1.

3、读写二进制文件函数

注意:在未close文件前,对文件进行多次write,是不会清除文件中原来的数据的。

1)fread

fread(buffer,size,count,fp)

buffer:指针,表示内存中存储空间的首地址;

count:要读写的单元数

size:每单元的字节数

fp:文件指针。

从fp所指的文件中读count个单元,每个单元size个字节,到以buffer为起始地址的内存中

例如:

int a[2];

fread(a,4,2,fp);

2)fwrite

fwrite(buffer,size,count,fp)

buffer:指针,表示内存中存储空间的首地址;

count:要读写的单元数

size:每单元的字节数

fp:文件指针。

将以buffer为起始地址内存中的count个单元,每个单元size个字节写到fp所指的文件中。

例如:

int a[2]={1,2};

fwrite(a,4,2,fp); 将以a为起始地址的内存中的2个单元,每单元4个字节,写到fp所指的文件中。

4、文件定位函数

顺序存储的时候,对文件读写操作是从文件的开始位置进行的,

随机存取文件可以从从文件的任意位置进行操作的。

fopen的时候,文件位置指针指向文件的开头,第一个数据之前;

文件结束后,文件位置指针指向文件的结尾,最后一个数据之后。

对数据进行读操作,文件位置指针指向尚未读数据之前;

对数据进行写操作,文件位置指针指向刚写入的数据之后。
1)fseek(fp,offset,origin);  //一般用于二进制文件,因为文本文件会发生字符转换,计算位置会发生混乱。

offset为以origin为几点,以字节为单位的偏移量;当offset为正整数,表示位置指针从指定的起始点向后移动,当offset为负整数的时候,表示位置指针从指定的起始点向前移动。

起始点位置宏定义宏定义值
文件起始位置SEEK_SET0
文件当前位置SEEK_CUR1
文件末尾位置SEEK_EDN2

返回到文件开头位置:

fseek(fp,0L,SEEK_SET);   //文件第一个数据之前?(指向文件第一数据)

返回到文件末尾位置:

fseek(fp,0L,SEEK_END);  //文件最后一个数据之后

2)ftell函数

获得文件当前位置指针的位置,并返回当前位置指针相对于文件开头的字节数。

ftell(文件指针)

例如:

计算文件的中总的字节数

fseek(fp,0L,SEEK_END);

long   size = ftell(fp);

3)rewind函数

rewind(fp);

使文件指针返回到文件开头位置。

等价于fseek(fp,0L,SEEK_SET);

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值