前言:为什么使用文件
学习过C语言的伙伴,对程序运行结果往往出现在一个黑框里一定不陌生,一旦关闭黑框程序就结束,为数据分配的内存空间也会随之退还。如果你想使用C语言写一个通讯录的话,一定不想黑框关闭存入的数据就丢失,那么此时我们就需要学会使用文件操作。 为了使数据持久的保存在硬盘中,我们可以采用把数据存放在磁盘文件的方式。本篇博客,我们就主要介绍C语言中的文件操作。
一、什么是文件
磁盘上的文件是文件
程序设计中,文件分为两种:程序文件、数据文件(从文件功能的角度来分类的)
1.1程序文件
源文件、目标文件、可执行文件
1.2数据文件
文件的内容不一定是程序,而是程序运行时读写的数据,比如程序运行需要从中读取数据的文件, 或者输出内容的文件。
1.3文件名
一个文件要有一个唯一的文件标识,以便用户识别和引用。
文件名包含3部分:文件路径+文件名主干+文件后缀
ps:文件名可以没有后缀!!
在没有文件操作的C语言终端程序中,数据的输入输出都是以终端为对象的,即从终端的键盘输入数据,运行结果显示到显示器上。其实有时候我们会把信息输出到磁盘上,当需要的时候再从磁盘上把数据读取到内存中使用,这里处理的就是磁盘上文件。
二、文件的打开和关闭
2.1文件指针
缓冲文件系统中,关键的概念是“文件类型指针”,简称“文件指针”。
每个被使用的文件都在内存中开辟了一个相应的文件信息区,用来存放文件的相关信息(如文件的名 字,文件状态及文件当前的位置等)。这些信息是保存在一个结构体变量中的。该结构体类型是有系统 声明的,取名FILE.
结构体中的内容大致如下:
以VS2013编译环境提供的 stdio.h 头文件中的文件类型申明为例子:
不同的C编译器的FILE类型包含的内容不完全相同。
每当打开一个文件的时候,系统会根据文件的情况自动创建一个FILE结构的变量,并填充其中的信息, 使用者不必关心细节。
一般都是通过一个FILE的指针来维护这个FILE结构的变量,这样使用起来更加方便。
下面我们可以创建一个FILE*的指针变量:
FILE* pf;//文件指针变量
定义pf是一个指向FILE类型数据的指针变量。可以使pf指向某个文件的文件信息区(是一个结构体变 量)。通过该文件信息区中的信息就能够访问该文件。也就是说,通过文件指针变量接收了打开文件信息区的起始地址也就能够找到与它关联的文件。
2.2文件的打开和关闭
通过文件指针我们就可以操作我们所需要的文件。
文件在读写之前应该先打开文件,在使用结束之后应该关闭文件。 在编写程序的时候,在打开文件的同时,都会返回一个FILE*的指针变量指向该文件,也相当于建立了指针和文件的关系。 ANSIC 规定使用fopen函数来打开文件,fclose函数来关闭文件。
fopen函数
该函数有两个参数 一个是你要打开的文件按名称、一个是打开文件的方式
该函数的返回值是一个FILE类型的指针,在文件成功打开后返回此文件信息区的起始地址,打开失败则返回一个NULL(空指针),所以使用fopen时需要一个FILE类型的指针来接收其返回值。
关于文件打开方式的选项列表
注:当使用“w”,“wb”,“w+”,“wb+”打开文件时会清除文件原本存储的数据。