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_SET | 0 |
| 文件当前位置 | SEEK_CUR | 1 |
| 文件末尾位置 | SEEK_EDN | 2 |
返回到文件开头位置:
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);
本文详细介绍了二进制文件的读写方法,包括fopen、fread、fwrite、fclose等函数的使用,以及如何使用fseek和ftell进行文件定位。同时,对比了文本文件和二进制文件的区别,提供了具体的示例代码。

5648

被折叠的 条评论
为什么被折叠?



