首页 理论教育文件读写指针和文件尾检测方法

文件读写指针和文件尾检测方法

【摘要】:在程序设计中,需要区别文件指针和文件内部读写位置指针两个不同的操作对象。文件内部读写位置指针用以指示文件内部的当前读写位置,每读写一次,根据读写记录的个数,该指针均自动向后移动与读写方式相适应的距离。读写位置指针未到文件尾时函数返回0值;读写位置指针到达文件尾时函数返回非0值。

1.文件内部读写位置指针

记录是文件内部的组织单位,不同类型文件之间的记录大小也不尽相同。例如,文本文件的记录是一个字节,而32位系统的二进制整型数据文件的记录则是4个字节。当打开(或创建)一个文件时,系统自动为打开的文件建立一个文件内部读写位置指针(也称为文件内部记录指针)。该指针在对文件的读写过程中用于指示文件的当前读写位置,每次对文件进行了读或写之后,文件位置指针自动更新指向下一个新的读写位置。

在程序设计中,需要区别文件指针和文件内部读写位置指针两个不同的操作对象。文件指针(FILE类型)用于关联程序中被操作文件,在程序中必须进行定义。打开一个文件并与文件指针关联后,只要不重新赋值,文件指针的值是不变的。文件内部读写位置指针用以指示文件内部的当前读写位置,每读写一次,根据读写记录的个数,该指针均自动向后移动与读写方式相适应的距离。文件内部记录指针不需在程序中定义说明,由系统在创建或者打开文件时自动设置。

2.文件尾的检测

文件处理程序中,需要判断所处理的文件是否处理完成,即文件的读写位置指针是否已经移动到了文件尾标志处。

对于文本文件,由于任何一个字符的ASCII值均不可能是-1,所以用-1表示文本文件的文件尾标志,系统中用符号常量EOF来表示。除了可以表示文本文件的结尾外,EOF还常常用于判断键盘上的输入字符流是否结束。(www.chuimin.cn)

在二进制文件中,因为数据中有可能出现-1,所以使用EOF符号常量并不能正确地表示出二进制文件的结尾。C标准库中提供了一个用于测试文件状态的函数feof,使用feof函数判断文件内部读写指针位置是否到了文件尾标志处(即文件数据处理是否结束),它既适用于文本文件又适用于二进制文件。feof函数的原型为:

int feof(FILE*stream);

feof函数的功能是:测试由stream所对应文件的内部读写位置指针是否移动到了文件结尾。读写位置指针未到文件尾时函数返回0值;读写位置指针到达文件尾时函数返回非0值。例如,当文件指针变量fp已经正确地关联了被处理文件,则程序中常用feof(fp)函数调用的结果(0或非0)作为判断文件数据处理是否完成的条件。

需要特别指出的是,无论是文件操作模式的选取还是文件尾的判断,凡是能够处理二进制文件的选择都可以处理文本文件。所以当文件处理问题中没有明显指定是文本文件处理时,都可以考虑使用二进制文件方式进行处理。