文件的打开和读写函数详解

技术与开发

语言类型:C语言

上手难度:★★

考试类型:计算机二级

题目:设fp为指向某二进制文件的指针,且已读到此文件末尾,则函数feof(fp)的返回值为。[2006年4月C语言选择题第27题]

A)EOF B)非0值

C)0 D)NULL

答案:B

解析:函数feof的功能是:测试fp所指的文件的位置是否已达到文件尾,如果达到文件尾,则函数返回非0值,否则返回0,表示文件尚未结束。

考试大纲要求考生对文件操作部分只掌握缓冲文件系统(即高级磁盘I/O系统),包括文件类型指针(FILE类型指针)、文件的读写、文件的定位等函数,对非标准缓冲文件系统(即低级磁盘I/O系统)不要求。虽然在考题中占用的分数不多,仅出现一两道题,但属于送分题,考生对常用的缓冲文件系统函数的用法掌握后就能轻松拿到这些分。

文件的定义和分类

“文件”是存储在外部介质上数据的集合。这个数据集有一个名称,叫做文件名。例如:源程序文件、目标文件、可执行文件、库文件(头文件)等。文件通常是驻留在外部介质(如磁盘等)上的,在使用时才调入内存中来。

从不同的角度可对文件作不同的分类。从用户的角度看,文件可分为普通文件和设备文件两种。从文件编码的方式来看,文件可分为ASCII码文件和二进制码文件两种。

对文件的处理方法分为两种:“缓冲文件系统”和“非缓冲文件系统”。考纲只要求掌握缓冲文件系统。所谓缓冲文件系统是指系统自动地在内存区为每一个正在使用的文件名开辟一个缓冲区,从内存向磁盘输出数据必须先送到内存中的缓冲区,装满缓冲区后才一起送到磁盘中去。

文件打开函数fopen的应用

fopen函数用来打开一个文件,其调用的一般形式为:

文件指针名=fopen(文件名,使用文件方式)

其中,“文件指针名”必须是被说明为FILE 类型的指针变量,“文件名”是被打开文件的文件名。“使用文件方式”是指文件的类型和操作要求。“文件名”是字符串常量或字符串数组。例如:

FILE *fp

fp=fopen("C:\\aaa.txt,"rb") //打开C驱动器磁盘的根目录下的文件aaa,两个反斜线“\\”中的第一个表示转义字符,第二个表示根目录。

使用文件的方式共有12种,分别为r、w、a、rb、wb、ab、r+、w+、a+、rb+、wb+、ab+,对于文件使用方式需要注意:

1.文件使用方式由r,w,a, b,+字符拼成,各字符的含义是:

r(read): 读

w(write): 写

a(append): 追加

b(banary): 二进制文件

+: 读和写

2.用“r”打开一个文件时,该文件必须已经存在,且只能从该文件读出。

3.用“w”打开的文件只能向该文件写入。若打开的文件不存在,则以指定的文件名建立该文件,若打开的文件已经存在,则将该文件删去,重建一个新文件。

4.若要向一个已存在的文件追加新的信息,只能用“a”方式打开文件。但此时该文件必须是存在的,否则将会出错。

5.在打开一个文件时,如果出错,fopen将返回一个空指针值NULL。在程序中可以用这一信息来判别是否完成打开文件的工作,并作相应的处理。因此常用以下程序段打开文件:

if((fp=fopen("C:\\aaa","rb")==NULL)

{printf("\nerror on open C:\\aaa file!");

exit(0);

}

这段程序表述的含义是:如果不能打开C盘根目录下的aaa文件,则给出提示信息“error on open C:\ aaa file!”,exit函数的作用是关闭所有文件,终止正在调用的过程。

6.在使用完一个文件后应该关闭它,以防被误用,“关闭”就是使文件指针变量不指向该文件,用fclose函数关闭文件,fclose函数调用的一般形式为:

fclose(文件指针);

例如:

fclose(fp);//当顺利执行了关闭操作,则返回0,如果返回值为非0,表示关闭时有错误,可以用ferror函数来测试。

文件写操作fputc函数的应用

fputc函数的功能是把一个字符写入指定的文件中,函数调用的一般形式为:

fputc(字符量,文件指针);

其中,字符量可以是字符常量或变量,例如:

fputc('a',fp);//其意义是把字符a写入fp所指向的文件中。

对于fputc函数的使用需要注意:

1.被写入的文件可以用写、读写,追加方式打开,用写或读写方式打开一个已存在的文件时将清除原有的文件内容,写入字符从文件首开始。如需保留原有文件内容,希望写入的字符以文件末开始存放,必须以追加方式打开文件。被写入的文件若不存在,则创建该文件。

2.每写入一个字符,文件内部位置指针向后移动一个字节。

3.fputc函数有一个返回值,如写入成功则返回写入的字符, 否则返回一个EOF。可用此来判断写入是否成功。