为什么要进行文件操作:
写通讯录的程序,当通讯录运行起来的时候,可以给通讯录中增加、删除数据,此时数据是存放在内存中,当程序退出的时候,通讯录中的数据自然就不存在了,等下次运行通讯 录程序的时候,数据又得重新录入,如果使用这样的通讯录就很难受。所以在通讯录中要想要信息记录下来,并且数据达到持久,就需要进行文件管理。
什么是文件
存储在硬盘上面的就是文件,文件又分为程序文件和数据文件
程序文件包括源程序文件(后缀为.c),目标文件(windows环境后缀为.obj),可执行程序(windows环境后缀为.exe)。
文件的打开和关闭
每个被使用的文件都在内存中开辟了一个相应的文件信息区,用来存放文件的相关信息(如文件的
名字,文件状态及文件当前的位置等)。这些信息是保存在一个结构体变量中的。该结构体类型是
由系统声明的,取名FILE。
下面我们可以创建一个FILE*
的指针变量
:
通过该指针我们就能找到与它关联的文件。
ANSIC
规定使用
fopen
函数来打开文件,
fclose
来关闭文件。
文本文件和二进制文件
根据数据的组织形式,数据文件被称为
文本文件
或者
二进制文件
。
数据在内存中以二进制的形式存储,如果不加转换的输出到外存,就是
二进制文件
。
如果要求在外存上以
ASCII
码的形式存储,则需要在存储前转换。以
ASCII
字符的形式存储的文件就是
文
本文件
。
测试代码:
文件读取结束判定
在文件读取过程中,不能用
feof
函数的返回值直接来判断文件的是否结束。
feof
的作用是:当文件读取结束的时候,判断是读取结束的原因是否是:遇到文件尾结束。
1.
文本文件读取是否结束,判断返回值是否为
EOF
(
fgetc
),或者
NULL
(
fgets
)
例如:
fgetc
判断是否为
EOF
.
fgets
判断返回值是否为
NULL
.
2.
二进制文件的读取结束判断,判断返回值是否小于实际要读的个数。
例如:
fread
判断返回值是否小于实际要读的个数。
文件缓冲区
ANSIC
标准采用
“
缓冲文件系统
”
处理的数据文件的,所谓缓冲文件系统是指系统自动地在内存中为程序 中每一个正在使用的文件开辟一块“
文件缓冲区
”
。从内存向磁盘输出数据会先送到内存中的缓冲区,装 满缓冲区后才一起送到磁盘上。如果从磁盘向计算机读入数据,则从磁盘文件中读取数据输入到内存缓 冲区(充满缓冲区),然后再从缓冲区逐个地将数据送到程序数据区(程序变量等)。缓冲区的大小根 据C
编译系统决定的。