文件的基本概念与操作
一般并不直接使用FILE类型变量,而是设置一个指向
FILE类型变量的指针变量,称为文件指针,通过它来间接 引用这些FILE类型变量。程序通过文件指针对文件进行各 种各样的操作。文件指针的定义形式如下: FILE *文件指针变量; 说明:定义了一个指向FILE类型结构体的指针变量, 该指针变量指向文件的结构体变量,从而再通过该结构体变 量中的文件信息去实现文件的访问。如果有n个文件,一般 应定义n个文件指针变量,使它们能分别指向这n个文件并实 现文件的访问。
表 8-1 文件使用方式
文件使用方式 "r" "w" "a" "rb" "wb" "ab" "r+" "w+" "a+" "rb+" "wb+" "ab+" 含 义 只读,为输入打开一个文本文件 只写,为输出新建一个文本文件 追加,向文本文件尾添加数据 只读,为输入打开一个二进制文件 只写,为输出新建一个二进制文件 追加,向二进制文件尾添加数据 读写,为读/写打开一个文本文件 读写,为读/写新建一个文本文件 读写,向文本文件尾添加数据,同时可读 读写,为读/写打开一个二进制文件 读写,为读/写新建一个二进制文件 读写,向二进制文件尾添加数据,同时可读
例如:
FILE *fp; FILE *f1,*f2; /* 定义文件指针变量fp */ /* 定义文件指针变量f1、f2 */
Hale Waihona Puke 2. 头文件“stdio.h”中有关文件操作的函数
1) 打开和关闭 要对文件进行读、写操作,就必须先将文件打开;在进 行完对文件的相关操作之后,再将其关闭。在C语言中,打 开文件是用fopen函数实现的,关闭文件则用fclose函数 实现。
8.1.2 文件的基本操作
1. 文件指针变量 在缓冲文件系统中,关键的概念就是“文件指针”。对 于每一正在被使用的文件,都会在内存中开辟一个区,专门 用来存放文件的相关信息。其中包括文件的名字、文件的状 态以及文件的当前位置等信息,而这些信息都是保存在一个 结构体的变量中,该结构体类型是由系统定义的,取名为 FILE。而在C语言中,这些文件类型的声明均在“stdio.h” 头文件中。
打开文件函数一般格式如下:
fopen(文件名,文件使用方式); 作用:申请以特定的文件使用方式打开文件名所对应的 文件,若成功,则返回一个文件指针;若失败,则返回 NULL空指针。 说明:第一个参数“文件名”是字符串,为所要打开文 件的名字,文件名中可带有路径名,缺省时默认为当前路径; 第二个参数“文件使用方式”也为字符串,给出使用文件的 方式,其具体内容与含义如表8-1所示。
文件的使用具体可从以下三个步骤进行操作:
(1) 打开文件。在使用文件时,先在内存中创建一个存 储区域称为缓冲区,再放入文件一部分内容进行处理,处理 结束后再更新另一部分文件内容,直至整个文件内容处理结 束,即能使用文件全部内容。 (2) 读、写文件。从文件中提取数据称为读文件,读文 件其实就是在读缓冲区中的数据,缓冲区的数据读完,系统 便会自动更新。而将数据保存到文件中称为写文件,写文件 其实就是将数据写入到缓冲区中,直到写满缓冲区,系统便 会自动将数据存到外存相应的文件中,并重新清空缓冲区的 数据。
字符(字节)的数据顺序组成。从数据的组织形式上可把文件
分为以下两种。
(1) 文本文件(ASCII文件)。文本(text)文件又称ASCII文
件,它的数据是用ASCII码保存的,即每一个字节放一个 ASCII代码,代表一个字符,使文本文件一个字节对应一个 字符,方便对字符进行逐个处理,也便于输出字符,但一般 占存储空间较多,且需要花时间进行二进制形式与ASCII码 间的转换。 (2) 二进制文件。二进制文件是将内存中的数据按其在 内存中存储形式原样输出到磁盘上存放,可以节省外存空间 和转换时间,但每一个字节并不对应一个字符,不能直接输 出字符形式。
例如,整数-1234,在内存中占4个字节,而如果按
ASCII码形式输出,则在文本文件中分别保存 ‘-’、‘1’、‘2’、 ‘3’、‘4’ 五个字符的ASCII码,共占5个字节。若按二进制形 式输出,则按内存中存储形式原样输出,在文件中占4个字 节。 文本文件和二进制文件各有优缺点。文本文件的优点是 可直接打开阅读;缺点是读取和保存数据时需要时间转换。 二进制文件恰恰相反,读取和保存数据时不用转换,且速度 快;缺点则是不能直接打开阅读。
(3) 关闭文件。关闭文件即表示文件使用完毕,让操作
系统撤消缓冲区。应注意,当文件使用完毕时,必须执行关 闭文件操作,否则数据有可能丢失。原因是在写文件过程中, 当缓冲区没有写满时,系统就不会将数据存到外存文件中, 这时若没有执行关闭文件操作,则关闭操作系统时数据便会 丢失。若执行了正常关闭文件操作,系统就会在撤消缓冲区 之前把没有写满缓冲区中的数据存到外存文件中,就不会造 成数据的丢失。
说明: ① 用“r”方式打开的文件只能进行读操作不能进行写操 作,并且在使用“r”方式打开文件之前必须已经存在该文件, 不能打开一个不存在的文件,否则系统出错。 ② 用“w”方式打开的文件只能进行写操作不能进行读操 作。在使用“w”方式时,如果原来不存在文件,则在打开文 件时会新建一个新文件;如果原来已经存在文件,则在打开 时会先将该文件删除,再重新建立一个新文件。 ③ 用“a”方式打开的文件是在已经存在的文件末尾添加 新的数据,位置指针移到文件末尾,因此不会删除文件中原 有的数据。但该文件必须已经存在,否则系统出错。 ④ 用"r+"、"w+"、"a+"方式打开的文件既可以进行读操 作,也可以进行写操作。其中"r+"、"a+"方式只能打开已经 存在的文件,且"a+"方式打开的文件是从文件末尾添加数据。 "w+"方式则是新建一个文件,再从文件头部开始写数据, 然后可以读此文件的数据。
第8单元 文
件
8.1 文件的基本概念与操作
8.2 文件的应用 8.3 文件的定位
8.1 文件的基本概念与操作
8.1.1 文件的基本概念 在程序设计中“文件”是一个重要的概念,通常是指存 储在外部存储介质上数据的集合。在程序运行时,往往要将
一批数据存储到外部磁盘上,需要时再将数据从磁盘中输入
到计算机内存。因此,也把文件称为“磁盘文件”。 C语言把文件看做是字符(字节)的序列,即由一个一个