C语言利用缓冲文件系统管理文件的时候,系统将自动为每一个打开的文件建立缓冲区,以便得到文件的读写位置以及与该文件对应的内存缓冲区的地址,还有文件的操作方式等信息。
1.文件指针
C语言中将有关文件缓冲区的一些信息(如缓冲区对应的文件名、文件所允许的操作方式、缓冲区的大小以及当前读/写数据在缓冲区的位置)使用一个结构体类型来描述,其类型名为FILE。对每一个要操作的文件,都要定义一个指向FILE类型结构体的指针变量,这个指针称为文件指针。通过文件指针就可对它所指的文件进行各种操作。定义说明文件指针的方法为:
FILE *指针变量标识符;
其中FILE应为大写,它实际上是由系统定义的一个结构,。在编写源程序时不必关心FILE结构的细节。例如:
FILE *fp;
表示fp是指向FILE结构的指针变量,通过fp即可找存放某个文件信息的结构变量,然后按结构变量提供的信息找到该文件,实施对文件的操作。习惯上也笼统地把fp称为指向一个文件的指针。
2. 文件的打开
文件的操作过程必须是“先打开,后读写,最后关闭”。所谓打开文件就是以某种方式从磁盘上查找指定的文件或创建一个新文件,建立文件的各种有关信息,并使文件指针指向该文件,以便进行其它操作。
在C语言中,文件操作都是由库函数来完成的。C语言中打开文件可以使用输入/输出库中提供的fopen()函数,其格式为:
文件指针名 = fopen( 文件名, 使用文件方式 );
其中:
l “文件指针名”必须是被说明为FILE 类型的指针变量;
l “文件名”是被打开文件的文件名,是字符串常量或字符串数组,也可以带路径;
l “使用文件方式”是指文件的类型和操作要求,控制该文件被打开后是用于读、写还是既读既写等12中文件打开模式,如下表所示:
表8-1 使用文件方式
例如:
FILE *fp;
fp=("file1","r");
其意义是在当前目录下打开文件名为“file1”的文件,只允许进行“读”操作,并使fp指向该文件。
如要操作的文件不在当前目录下,则可以在文件上加上路径,例如:
FILE *fp;
fp=("D:\\file2","rb");
其意义是打开D驱动器磁盘根目录下文件名为“file2”的文件,该文件是二进制文件,只允许进行“读”操作,并使fp指向该文件。
3.文件的关闭
文件关闭函数(fclose函数)
文件一旦使用完毕,应用关闭文件函数把文件关闭,以避免文件的数据丢失等错误。fclose函数调用的一般形式是:
fclose(文件指针);
例如:
fclose(fp);
正常完成关闭文件操作时,fclose函数返回值为0。如返回非零值则表示有错误发生。
【例8-1】打开单个文件
以“读”的方式打开一个文本文件,编写程序确定文件是否被打开。
#include <stdio.h>
int main()
{
FILE *fp;
char name[50];
printf(“input file path and name:”);
gets(name);/*输入文件的路径及文件名*/
fp=fopen(name,”r”);/*以读的方式打开文件*/
if(fp==NULL)/*文件不存在*/
{
printf(“can not open file.\n”);
getch();
exit(0); /*返回*/
}
else
{
printf(“now %s is opening.\n”,name);
getch();
fclose(fp);/*文件处理完毕后要关闭文件*/
}
return 0;
}
程序运行结果:
input file path and name:D:\C实例\demo.txt
now D:\C实例\demo.txtis opening.
本例题中由于要打开是文本文件,使用fopen()函数时,文件模式为“r”。在打开一个文件时,如果出错,fopen将返回一个空指针值NULL。在程序中可以用这一信息来判别是否完成打开文件的工作,并作相应的处理。