本章节学习了文件操作的内容,现在来梳理一下所有的核心知识点。
1.为什么使用文件
我们在编写并运行程序时,向内存申请空间来存放需要的数据,而当我们关闭程序的时候,申请的空间又还给了操作系统,随之存放的数据也被销毁,无法得到长期的保存。
因此,我们可以通过创建文件的方式,将数据写入硬盘,从而实现数据存储的永久性。
2.什么是文件
文件是一种存储数据的类型,它将数据存储在硬盘当中,当我们需要使用的时候,可以打开文件获取。
文件主要包括两种形式,程序文件和数据文件。程序文件是一种可执行操作的文件,如我们编写的以.c为后缀的C语言文件。而数据文件就是存放数据的文件,主要是起到一个仓库的作用
文件名主要由三部分组成,路径 名称 后缀。
路径:是该文件在硬盘中的一个位置的描述,便于我们来寻找文件
名称:就是我们在创建文件时给它的命名,用来区分各种文件,便于我们识别文件的内容
后缀:文件的类别,不同的后缀对应的文件的效果不同
3.文件的打开和关闭
我们在编写C程序时,如何来使用文件呢?
核心的流程就是: 打开文件 对文件进行操作 关闭文件,这三个步骤。
使用文件的底层原理简化为,我们在内存中使用文件流来操作硬盘中的文件。
对应的打开和关闭文件要使用到两个C语言给我们提供的库函数:fopen 和 fclose
fopen函数,其参数是要打开的文件名,打开的形式。返回值是一个文件指针(该指针执行文件流在内存中的空间,即我们可以通过这个指针来操作文件)类型是FILE* 其功能就是以我们选择的方式来打开文件:这里常用的方式主要为 w:写 r:读 wb:二进制写 rb:二进制读。
fclose函数,其参数我们要关闭的文件对应的文件指针,功能是关闭对应的文件。
而对文件进行操作就涉及到下一个知识点,文件的读写。
4.文件的读写
就是将要存储的数据写入文件,并在需要时从文件中读取数据来使用。
而C语言给我们提供了4组库函数来让我们读写文件
分别是 1.fgetc和fputc 2.fgets和fputs 3.fprintf和fscanf 4.fwrite和fread
它们都可以实现对文件的读写,只是读写的方式有所差异。
1.以单个字符读写 2.以行读写 3.以格式化读写 4.以二进制读写
文件的随机读写
1.意义: 我们在读取文件时,不想要按照顺序结构来读取,想要从数据的某一个位置来读取数据,就需要用到随机读写的技术。
2.三个函数:
fseek 参数:1.要读取的文件指针 2.距离锚点位置的偏移量 3.锚点位置(起点 操作点 结束点)
如: 文件中有 abcdefgh 一串字符,顺序结构的输出则为 abcdefgh ,而起点是 a 结束点是 h,则b的距离起点的偏移量为1,距离结束点的偏移量为-6,
而操作点是指,在读写的过程中,指针会移动位置,所以当前指针所在的位置就是操作点。
功能:从一个指定的位置开始读取文件。
ftell 返回值类型: int 参数:1.文件指针
功能:确定当前的指针位置相较起始位置的偏移量。
rewind 参数:1.文件指针
功能:使文件指针返回起始点的位置。
5.文本文件和二进制文件
文本文件和二进制文件,是文件记录的两种格式。
简单来讲,一般我们可以看懂的文件就是文本文件,而我们看不懂的就是二进制文件。
文本文件:文件以文本的形式来存储。
二进制文件:文件以二进制的形式来存储。
以二进制来存储文件有时能起到节省空间的效果,所以这也是它存在的意义。
6.文件缓冲区
为了提高文件读写的效率,所以出现了文件缓冲区。
我们在写入文件时,并非直接从内存向硬盘写入,而是先将数据放入文件缓冲区,待数据存满后,在一次性存入硬盘中,这样避免了频繁调用操作系统,提高了效率。当然我们遇到紧急的文件时,可以同对应的函数直接将文件写入硬盘。
7.文件读取结束的判定
两个函数:
ferror 参数:文件指针
功能:判定文件读取结束是否是因为意外错误而结束。
feof 参数:文件指针
功能:判定文件读取结束是否是因为文件内容读取完毕。
判定方法:
fgetc :当返回值为EOF时,则读取结束。
fgets :当返回值为空指针时,则读取结束。
fread :当返回的整数小于参数规定的读取个数时,则读取结束。