文章目录
什么是文件?
文件是计算机文件,属于文件的一种,与普通文件的载体不同,计算机文件是以计算机硬盘为载体存储在计算机上的信息集合。
在程序设计中,我们一般关注的文件有两类,即程序文件和数据文件。
程序文件: 包括源程序(以.c为后缀)和可执行程序(以.exe为后缀)。
数据文件: 文件的内容不一定是程序,而是程序运行时读写的数据。比如程序运行时需要从中读取数据的文件,或者输出内容的文件。
注:这里本篇内容讨论的是数据文件。
文件名
一个文件要有一个唯一的文件标识,以便用户识别和引用。
文件标识主要包含三部分:文件路径+文件名主干+文件后缀。
例如:
但是为了方便起见,文件标识常被称为文件名。
文件类型
根据数据的组织形式,数据文件被称为二进制文件或文本文件。
二进制文件: 数据在内存中以二进制的形式进行存储,如果不加转换直接输出到外存,就是二进制文件。
文本文件: 如果要求在外存上以ASCII码的形式存储,则需要在存储前进行转换。以ASCII码的形式进行存储的文件就是文本文件。
那么一个数据在外存中是如何存储的呢?
字符一律以ASCII码值进行存储;数值型数据既可以以ASCII码值进行存储,也可以以二进制的形式进行存储。
例如,有整数10000,如果我们以ASCII值的形式输出到磁盘,那么它将在磁盘中占用5个字节(一个字符一个字节);而如果以二进制的形式进行输出,那么它只在磁盘中占用4个字节(一个整型大小即可存储):
文件缓冲区
文件缓冲区是用以暂时存放读写期间的文件数据而在内存区预留的一定空间。使用文件缓冲区可减少读取硬盘的次数。
文件缓冲系统: 是指系统自动地在内存中为程序中每一个正在使用的文件开辟开辟一块“文件缓冲区”。从内存向磁盘输出的数据会先送到内存中的缓冲区,待缓冲区装满后才一起送到磁盘上。如果从磁盘向计算机读入数据,则从磁盘文件中读取数据输入到内存缓冲区,待缓冲区装满后,再从缓冲区逐个地将数据送到程序数据区。缓冲区的大小是根据C编译系统决定。
为什么存在缓冲区?
相信有很多人心里还不理解为什么存在缓冲区。举个比较形象的例子,当你的老师在忙于备考时,你有一点小问题就去请教老师,有一点小问题又去请教老师,这种情况下老师的备考效率会大大降低,那么你为什么不将你的小问题累计起来,当累计到一定量时再一次性去请教老师,这样老师的备考效率也会相对提高。
例子中的“老师”就好比操作系统,“小问题”就好比需要操作系统传输的信息,而“你积累问题到一定量再去请教老师”就好比缓冲区的工作机制。
总而言之,缓冲区的存在大大提高了操作系统的效率。
文件指针
每个被使用的文件都在内存中开辟了一个相应的文件信息区,用来存放文件的相关信息(如文件的名字、文件的状态及文件的当前位置等)。这些信息是保存在一个结构体变量中的,该结构体变量是由系统声明的,并将该结构体类型重命名为FILE。
例如,在VS2013编译器环境提供的stdio.h头文件中有以下的文件类型声明:
不同的C编译器的FILE类型包含的内容不完全相同,但是都大同小异。
每当我们打开一个文件的时候,系统会根据文件的情况自动创建一个FILE结构的变量,并填充其中的信息。
我们可以创建一个FILE*的指针变量:
定义pf是一个指向FILE类型的指针变量,可以使pf指向某个文件的文件信息区,通过该文件信息区中的信息就能够访问该文件。也就是说,通过文件指针变量就能找到与它关联的文件。
比如: