关于函数fopen()的使用方式参数,说明以下几点:
(1)用"r"方式打开的文件只能用于从文件输入数据,不能用于输出;而且要求该文件已经存在,否则函数fopen() 返回NULL值。
(2)用"w"方式打开的文件只能用于向文件输出数据,不能用于输入。如打开时,原文件不存在,则新建立一个以指定名字命名的文件;如原文件已存在,则原文件上的数据被全部删除。
(3)如希望打开文件用于写,又不要删除原文件中的数据,并从原文件的末尾开始添加新的数据,应该用"a"方式打开。
(4)用"r+"、"w+"、"a+" 方式打开的文件可以输入数据,也可以输出数据。用"r+"方式只允许打开已存在的文件,以便程序能输入数据;用"w+"方式打开,则新建立一个文件,先是
向文件输出数据,然后可以从该文件读人数据;用"a+"方式打开一个已存在的文件,位置指针先移到文件的末尾,准备添加数据,以后也可以输入数据。
( 5)要打开二进制文件,只要在对应正文文件打开方式中接上字符b即可,如"rb"表示以输入方式打开二进制文件。
正文文件与二进制文件在使用时,还有一点不同。对于正文文件,输入时,回车符和换行符合成为一个换行符输入;输出时,换行符('\n')转换成为回车符和换行符两个字符一起输出。对于二进制文件,不进行上述这种转换。
9.文件关闭库函数fclose()
在使用完一个文件后,程序应该立即关闭它,以防止后继执行的程序语句错误或人为的误操作破坏正打开着的文件。关闭文件可调用库函数fclose()来实现。调用函数fclose()的一般形式为
fclose(文件指针);
例如,
fclose(fp);
调用函数fclose()的作用是使文件指针变量终止原先调用函数fopen()时所建立的它与文件的联系。调用函数fclose()之后,不能再通过该文件指针变量对其原先相连的文件进行读写
操作,除非被再次打开。文件被关闭后,原文件指针变量又可用来打开文件,或与别的文件相联系,或重新与原先文件建立新的联系。
8.2 文件处理程序结构和文件输入输出常用库函数
1.正文文件输入处理
从正文文件逐一输入字符,对输入的字符作某种处理的程序结构有:
int c; /* 不能为char类型 */
… /*说明有关变量和设置初值等 */
fp=fopen(文件名,"r"); /* 正文文件以读方式打开 */
while(( c= fgetc(f))!= EOF) {
… /* 这里对刚读人的存于C中的字符作某种处理 */
}
fclose(fp);
.../*输出处理结果 */
其中函数 fgetC()的说明形式为
int fgetc(FILE *fp)
该函数的功能是从与中相联系的文件中读人下一个字符。在文件的控制块中,有一个当前读字符的位置信息,每读入一个字符后,在文件还未结束情况下,这个当前位置信息就移向其后一个字符,从而保证程序反复调用函数fgetc() 能顺序读人文件中的字符。函数fgetc() 的返回值就是读入字符的ASCII代码值。读八字符时,如遇到文件结束,函数返回文件结束标记EOF。对于正文文件,由于字符的ASCII代码不可能是-1,因此可用EOF(定义为-1) 作为文件结束标记。
【例8.1】 输入正文文件,统计文件中英文字母的个数,并输出。
为使程序更有一般性,设程序要统计的正文文件名在程序启动时由输入指定。