使用控制台输入会对我们输入量个大小产生限制,也不利于输出数据的永久保存。因此,我们时常使用程序进行文件操作解决这一问题。
文件指针
我们首先需要头文件stdio.h(C++则是cstdio)
在还未学习指针时,我们可以先将文件指针理解为操作文件的一种特殊的数据类型。
1 | FILE *myFileIn, *myFileOut; |
如此便声明了两个文件指针变量myFileIn和myFileOut,然后我们需要使用fopen函数,将它们指向硬盘中的真实的文件,以实现对文件的操作:
1 | FILE* fopen(文件名,操作类型); |
如:
1 | myFileIn = fopen("testIn.txt","r"); |
我们让myFileIn指向与程序同目录的testIn.txt文件,并注册为只读”r”;让myFileOut指向与程序同目录的testOut.txt文件,并注册为只写”w”。操作类型为写入,而路径下还没有此文件,程序就会创建这个文件;而如果此文件已经存在,程序则会覆盖它。
fopen还有其他的操作类型,用于不同的文件使用场合,这里不作介绍,可自行查询。
这样就完成了文件指针的初始化,在程序的编写中,我们就可以通过myFileIn使用硬盘中的testIn.txt文件,我们称此文件指针为一个文件句柄(file handle)。
文件输入输出
有了文件句柄,就可以使用文件进行输入输出了:
1 | int a; |
先在同目录下创建一个文件testIn.txt,输入一个数,然后运行程序。我们发现目录下生成了一个文件testOut.txt,输出了这个数加一。
fscanf、fprintf函数与scanf、printf函数类似,唯一的区别就是需要一个提供操作的文件句柄。
文件的结束(EOF)
fscanf函数还可以返回文件的结束信息(End Of File,EOF),在读完文件时给予反馈:
1 | int a[100],i=0; |
即可实现读取直到读完文件停止。
关闭文件
文件使用完毕后,需要使用fclose函数关闭文件,解除此程序对文件的占用。
1 | fclose(myFileIn); |
以上是对于文本文件(ascii)的基本操作,C/C++语言还提供更多丰富的文件操作,如对于二进制文件的fread/fwrite,涉及一些文件编码知识,可自行探索。
作业
思考
1、我们为什么要引进文件操作?
2、什么是文件句柄?使用文件为什么要引入文件句柄?