C++文件操作总结.doc
文件专题
1.文件的概念
1.1
文件是程序设计中的一个重要概念。所谓“文件”,一般是指存储在外部介质上数据的集合。一批数据是以文件的形式存放在外部介质〔如磁盘、光盘盒U盘〕上。操作系统是以文件为单位对数据进行管理的,也就是说,如果想找存在外部介质上的数据,必须先按文件名找到所指定的文件,然后再从该文件中读取数据。要向外部介质上存储数据也必须先建立一个文件〔以文件名标识〕,才能向它输出数据。
外存文件包括磁盘文件、光盘文件和U盘文件等。目前使用最广泛的是磁盘文件,本专题以磁盘文件为代表,在程序中对光盘文件和U盘文件的使用方法与磁盘文件相同。
1.2
在C++语言中,根据文件中存放的数据的格式不同,将文件分为二进制文件和ASCII文件。ASCII文件又称文本〔text〕文件或字符文件,它的每一个字节放一个ASCII代码,代表一个字符。二进制文件又称内部格式文件或字节文件,是把内存中的数据按其在内存中的存储形式原样输出到磁盘上存放。用ASCII码形式输出的数据是与字符一一对应的,一个字节代表一个字符,可以直接在屏幕上显示或打印出来。这种方式使用方便,比拟直观,便于阅读,便于对字符逐个进行输入输出。但一般占用内存空间较多,而且要花费转换时间〔二进制形式与ASCII码的转换〕。用内部格式〔二进制形式〕输出数值,可以节省外存空间,而且不需要转换时间,但一个字节并不对应一个字符,不能直观地显示文件中的内容。如果在程序运行过程中有些中间结果数据暂时保存在磁盘文件中,以后有需要输入到内存的,这时使用二进制文件保存是最适宜的。如果为了能显示和打印以供阅读,那么应按ASCII码形式输出。此时得到的是ASCII文件,它的内容可以直接显示在显示屏上观看。
1.3文件和文件流
文件流是以外存文件为输入输出对象的数据流。输出文件是从内存流向外存文件的数据,输入文件流是从外存文件流向内存的数据。每一个文件流都有一个内存缓冲区与之对应。
要区分文件和文件流的概念,文件流本身不是文件,而只是以文件为输入输出对象的流。假设要对磁盘文件输入输出,就必须通过文件流来实现。
在C++的I/O类库中定义了几种文件类,专门用于对磁盘文件的输入输出操作:
〔1〕ifstream类,从istream类派生而来的,用于支持从磁盘文件的输入。
〔2〕ofstream类,从ostream类派生而来的,用于支持向磁盘文件的输出。
〔3〕fstream类,从iostream类派生而来的,用于支持对磁盘文件的输入输出。
要以磁盘文件为对象进行输入输出,必须定义一个文件流类的对象,通过文件流对象将数据从内存输出到磁盘文件,或者通过文件流对象从磁盘文件将数据输入到内存。
其实在用标准设备为对象的输入输出中,也是要定义流对象的,如cin、cout就是流对象,C++是通过流对象进行输入输出的。由于cin、cout已在iostream.h中事先定义,所以用户不需要自己定义。在用磁盘文件时,由于情况各异〔标准输入输出设备就是键盘和显示屏,是固定的,所以可以统一定义;文件虽然都是在磁盘中的,但磁盘中有很多文件,写入或读出的是不同的文件,即文件是不同的〕,无法事先统一定义,必须有用户自己定义。对磁盘文件的操作是通过文件流对象实现的,文件流对象是用文件流类定义的。〔可以将文件流与标准输入输出流进行比拟,以便理解。〕
2.文件的使用
2.1
文件的使用方法根本相同。首先翻开一个文件,然后从文件中读取数据或将数据写入到文件中。在读写数据之前,必须先要翻开它。当不再使用该文件时,应关闭文件,以保存文件并释放系统资源。关闭之后的文件就不能再读写,除非再次翻开。
以某一种格式的数据写入到一个文件后,以后从该文件中读取数据时,只有按写入的格式依次读取数据时,读取的数据才是正确的,否那么读取的数据是不正确的。从文件中读取数据的类型是否正确,系统是无法检查的。保证从文件中依次取出与原先写入的数据类型一致是设计者的责任。
文件流作为一种特殊的流,具有自己的特点:
〔1〕在读写之前必须先翻开,读写之后应该关闭。3个文件流类都提供了翻开open和关闭close函数。
〔2〕在读取文件流时要特别关注文件尾EOF的判断。有多种方式来判断文件尾。
〔3〕随机访问。文件读写依赖读写指针,一般情况下读写指针从头向尾逐个字符或字节移动,但指针可以按顺序移动,也可以随机移动,能随机访问文件中的任何数据,而不限于按顺序访问。
2.2文件处理的一般过程
要使用一个文件,必须先翻开文件。翻开文件的目的是将一个文件流类对象与某一个磁盘文件联系起来;然后使用文件流类的成员函数,将数据写到文件,或从文件中读取数据。当不再读写文件时就要关闭文件,以断开磁盘文件与文件流类对象的联系。C++中使用文件的步骤可概括为4步:
〔1〕创立文件流对象