【小课堂】七、文件

使用控制台输入会对我们输入量个大小产生限制,也不利于输出数据的永久保存。因此,我们时常使用程序进行文件操作解决这一问题。

文件指针

我们首先需要头文件stdio.h(C++则是cstdio)
在还未学习指针时,我们可以先将文件指针理解为操作文件的一种特殊的数据类型。

1
FILE *myFileIn, *myFileOut;

如此便声明了两个文件指针变量myFileIn和myFileOut,然后我们需要使用fopen函数,将它们指向硬盘中的真实的文件,以实现对文件的操作:

1
FILE* fopen(文件名,操作类型);

如:

1
2
myFileIn = fopen("testIn.txt","r");
myFileOut = fopen("testOut.txt","w");

我们让myFileIn指向与程序同目录的testIn.txt文件,并注册为只读”r”;让myFileOut指向与程序同目录的testOut.txt文件,并注册为只写”w”。操作类型为写入,而路径下还没有此文件,程序就会创建这个文件;而如果此文件已经存在,程序则会覆盖它。
fopen还有其他的操作类型,用于不同的文件使用场合,这里不作介绍,可自行查询。

这样就完成了文件指针的初始化,在程序的编写中,我们就可以通过myFileIn使用硬盘中的testIn.txt文件,我们称此文件指针为一个文件句柄file handle)。

文件输入输出

有了文件句柄,就可以使用文件进行输入输出了:

1
2
3
int a;
fscanf(myFileIn,"%d",&a);
fprintf(myFileOut,"%d\n",a+1);

先在同目录下创建一个文件testIn.txt,输入一个数,然后运行程序。我们发现目录下生成了一个文件testOut.txt,输出了这个数加一。

fscanf、fprintf函数与scanf、printf函数类似,唯一的区别就是需要一个提供操作的文件句柄。

文件的结束(EOF)

fscanf函数还可以返回文件的结束信息(End Of File,EOF),在读完文件时给予反馈:

1
2
int a[100],i=0;
while( fscanf(myFileIn,"%d",&a)!=EOF )i++;

即可实现读取直到读完文件停止。

关闭文件

文件使用完毕后,需要使用fclose函数关闭文件,解除此程序对文件的占用。

1
2
fclose(myFileIn);
fclose(myFileOut);

以上是对于文本文件(ascii)的基本操作,C/C++语言还提供更多丰富的文件操作,如对于二进制文件的fread/fwrite,涉及一些文件编码知识,可自行探索。

作业

思考

1、我们为什么要引进文件操作?
2、什么是文件句柄?使用文件为什么要引入文件句柄?