前面我们完善了通讯录后,通讯录的大小随时可以调整,但是当程序退出的时候数据还是会丢失,我们希望能将数据存起来,将信息记录下来,那么我们就要将数据永久化,永久化的方法有:将数据放在磁盘中,将数据放到数据库等方式,使用文件我们可以将数据存放到硬盘当中,做到了数据的永久化。
电脑中磁盘中的文件就是文件,但在程序设计中,我们文件有两种:程序文件、数据文件。
程序文件:包括源文件(.c)、目标文件(.obj)、可执行程序(.exe)。
数据文件:文件的内容不一定是程序,而是运行程序时要进行读写的数据,比如我们有一个程序需要从文件中读取数据,那么目标文件就是数据文件。
之前我们的数据的输入输出都是由printf、scanf来完成的,以终端为对象的,即从终端中输入数据、运行结果显示到显示器上,有时我们需要以文件为对象,处理磁盘上的文件。
文件名:文件路径+文件名主干+文件后缀(c:\code\test.txt),c:\code\就是这个文件的路径名。
文件的关闭和打开:
文件如何使用程序来打开?首先我们来了解一个概念——文件指针,每个被使用的文件都会在内存中产生一个相对应的文件信息区,用来存放文件的相关信息(比如文件的名字、状态、位置等等),相关信息在不同的操作系统上都是不同的,这些信息被保存在一个结构体变量中,该结构体类型被重命名为FILE,因此我们需要在程序中创建一个文件指针来找到我们要打开的文件,即这个指针变量中存放的是存放文件信息区的地址。
FILE* fopen(const char* filename,const char* mode);这是文件的打开的函数,函数的第一个参数是要打开的文件的文件名,文件名有两种类型,第一种是相对路径,只写文件名,程序会在存放项目的文件中找这个文件,第二种是绝对路径,程序会根据给的路径来找这个文件;这个函数会返回一个指向要打开的那个文件的地址,我们需要用一个文件指针来接收,接收后我们要判断文件打开是否顺利,若成功打开,返回指针,若打开失败,返回NULL;我们的文件打开方式有“r”只读,从文件中读取数据到内存中,若我们给fopen函数的文件名文件不存在,函数会出错;“w”只写,把内存中的数据写到文件中,若我们给fopen函数的文件名不存在,若文件不存在,那么会自动创建一个文件;除了这些mode,还有“a”追加,“rb”只读,针对二进制文件,“wb”只写,针对二进制文件等等。
若要关闭文件,使用fclose(指向文件信息区的指针),不要忘记把这个指针置空。
我们打开文件后,肯定要进行对文件的操作,首先我们来介绍一种文件的读写方式--顺序读取,顺序读取的函数有好多,例如fgetc、fputc、fgets、fputs、fscanf、fprintf、fread、fwrite,后面这两个针对二进制文件,前面这几个函数针对的都是所有输入流或所有输出流。