面向对象的程序设计语言——C++ 第二版 教学课件 作者 陈志泊 第10章.ppt
文本预览下载声明
北京林业大学 软件教研室 第10章 文件 本章主要内容 (1)掌握文件的基本概念。 (2)掌握用FILE结构进行文件的打开、读写和关闭的方法。 (3)了解文件流类的继承关系。 (4)掌握文件流进行文件的打开、读写和关闭的方法。 文件是指存储在存储介质上的数据的集合。 按文件中数据的存放形式可将文件分为: ASCII文件 又称文本文件,它的每一个字节存放一个ASCII代码,代表一个字符; 其优点是可直接按字符形式输出文件的内容,也可用一般的字处理软件直接打开并查看文件的内容; 二进制文件 将数据用二进制形式存放在文件中,并保持了数据在内存中存放的原有格式; 其优点是存储效率高,无须进行存储形式的转换,但不能直接按字符形式输出。 无论是文本文件还是二进制文件都需要用“文件指针”来操纵,此处的“文件指针”是指表示读写文件的文件位置指示器。 一个文件指针总是和一个文件相关联,当文件每一次打开时,文件指针都指向文件的开始; 随着对文件进行操作,文件指针不断地在文件中移动,并一直指向最新处理的字符(字节)位置。 对文件的读写操作有两种方式: 顺序文件操作 从文件的第一个字符(字节)开始顺序地处理到文件的最后一个字符(字节)。 只能从文件的开始处依次顺序读写文件内容,而不能任意读写文件内容。 随机文件操作 在文件中通过C++相关的函数移动文件指针,并指向所要处理的字符(字节)。 可以在文件中来回移动文件指针和非顺序地读写文件内容。 能快速地检索、修改和删除文件中的信息。 10.1 通过FILE结构进行文件操作 C++保留了ANSI C对文件的处理方式,程序对每个文件都使用一个单独的FILE结构来处理。 每个被使用的文件都在内存中开辟一个区,用来存放文件的有关信息(如文件的名字、文件状态、文件当前位置等)。 这些信息保存在一个类型为FILE的结构体变量中。 该结构体类型FILE是由系统定义的。 在stdio.h文件中对FILE结构体类型是这样定义的: typedef struct { int _fd; //文件号 int _cleft; //缓冲区中剩余的字符 int _mode; //文件操作模式 char *_nextc; //下一个字符位置 char *_buff; //文件缓冲区位置 } FILE; 定义文件型指针变量,如:FILE *fp; fp是一个指向FILE类型结构体的指针变量。 可以使fp指向某一个文件的结构体变量,从而通过该结构体变量中的文件信息能够访问该文件。 如果有n个文件,一般应设n个指针变量,使它们分别指向n个文件以实现对文件的访问。 对文件读写之前应该“打开”该文件,在使用结束之后应“关闭”该文件。 10.1.1 打开文件 stdio.h文件中定义的fopen()函数实现文件的建立和打开操作。 FILE *fp; fp=fopen(文件名,文件的使用方式); 在打开一个文件时,通知给编译系统以下3个信息: (1)需要打开的文件名,也就是准备访问的文件的名字。 (2)使用文件的方式(“读”还是“写”等)。文件的使用方式如表所示。 (3)让哪一个指针变量指向被打开的文件。 说明: (1)用r方式打开的文件只能用于向计算机输入而不能用作向该文件输出数据,而且该文件应该已经存在,不能用r方式打开一个并不存在的文件,否则出错。 (2)用“w”方式打开的文件只能用于向该文件写数据,而不能用来向计算机输入。 如果原来不存在该文件则在打开时新建立一个以指定的名字命名的文件。 如果原来已存在一个以该文件名命名的文件,则在打开时将该文件删去,然后重新建立一个新文件。 (3)如果希望向文件末尾添加新的数据(不希望删除原有数据),则应该用a方式打开。但此时该文件必须已存在,否则将得到出错信息。打开时,位置指针移到文件末尾。 (4)用r+、w+、a+方式打开的文件既可以用来输入数据,也可以用来输出数据。 ① 用r+方式时该文件应该已经存在。 ② 用w+方式则新建立一个文件,先向此文件写数据,然后可以读此文件中的数据。 ③ 用a+方式打开的文件,原来的文件不被删去,位置指针移到文件末尾,可以添加,也可以读。 (5)如果不能实现“打开”的任务,fopen函数将会带回一个出错信息。出错的原因可能是: ① 用r方式打开一个并不存在的文件; ② 磁盘出故障; ③ 磁盘已满无法建立新文件等。 常用下面的方法打开一个文件: if ((fp=fopen(file,w))==NULL) coutcannot open this file.\nendl; (6)用以上方式可以打开文本文件或二进制文件,这是ANSI C的规定,用同一种缓冲文件系统来处理文本文件和二进制文件。 10.1.
显示全部