1第九讲第九讲C++C++面向对象程序设计面向对象程序设计(六)(六)第九讲第九讲C++C++面向对象程序设计面向对象程序设计(六)(六)张仕张仕数学与计算机科学学院E-mail:shi@fjnu.edu.cn2教学提纲•一、教学内容:–文件流操作•二、学时:两课时•三、教学目的和要求–掌握文件和文件流的概念–掌握文件打开、关闭和读写的方法–掌握顺序文件和随机文件的操作方法•四、教学重点和难点–重点:文件的读写–难点:随机文件的操作3四.教学过程提要–文件和文件流的概念–文件的打开、关闭和读写–顺序文件–随机文件–布置作业题目和实验4内容提要3.11文件流操作5先看一个例子:#includevoidmain()//程序从这里开始运行{ofstreamSaveFile("e:\\f1.txt");SaveFile<<"HelloWorld!";SaveFile.close();}63.11文件流3.11.1文件的概念和分类文件是指存储在存储介质上的数据的集合。C++将文件看作是由一个一个字符(字节)的数据顺序组成的。按照文件中数据的存放形式可以将文件分为:ASCII文件和二进制文件。7文本文件和二进制文件•从文件编码的方式来看,文件可分为ASCII码文件和二进制码文件两种。ASCII文件也称为文本文件,这种文件在磁盘中存放时每个字符对应一个字节,用于存放对应的ASCII码。例如,数5678的存储形式为:ASC码:00110101001101100011011100111000↓↓↓↓十进制码:5678•共占用4个字节。ASCII码文件可在屏幕上按字符显示。由于是按字符显示,因此能读懂文件内容。8•二进制文件是按二进制的编码方式来存放文件的。例如,数5678的存储形式为:0001011000101110只占二个字节。二进制文件虽然也可在屏幕上显示,但其内容无法读懂。C++系统在处理这些文件时,并不区分类型,都看成是字符流,按字节进行处理。输入输出字符流的开始和结束只由程序控制而不受物理符号(如回车符)的控制。因此也把这种文件称作“流式文件”。93.11.2文件的读写与文件指针•“文件指针”是指表示读写文件的文件位置指示器。一个文件指针总是和一个文件相关联,当文件每一次打开时,文件指针都指向文件的开始,随着对文件进行操作,文件指针不断地在文件中移动,并一直指向最新处理的字符(字节)位置。•对文件的读写操作方式有两种方式:顺序文件操作和随机文件操作。10C++中与文件处理相关的类及其继承关系结构图iosistreamostreamifstreamiostreamofstreamfstream11文件操作包括打开文件、读写文件和关闭文件3个步骤。文件的打开和关闭是通过使用fstream类的成员函数open和close来实现的。fstream类的头文件是fstream.h1.打开文件打开文件应使用成员函数open(),该成员函数的函数原型为:voidopen(constunsignedchar*szName,intnMode,intnProt=filebuf::openprot);12其中:szName是一个字符型指针,指定了要打开的文件名;nMode指定文件的打开方式,见表3.11-1。nProt指定了文件的保护属性,其取值为:0Compatibilitysharemode1Exclusivemode—nosharing2Readsharingallowed3Writesharingallowed.13表3.11-1在ios类中定义的文件打开方式文件打开方式含义ios::in以输入(读)方式打开文件ios::out以输出(写)方式打开文件ios::app打开一个文件使新的内容始终添加在文件的末尾ios::ate打开一个文件使新的内容添加在文件尾,但下一次添加时,写在当前位置处ios::trunc若文件存在,则清除文件所有内容;若文件不存在,则创建新文件ios::binary以二进制方式打开文件,缺省时以文本方式打开文件ios::nocreat打开一个已有文件,若该文件不存在,则打开失败ios::noreplace若打开的文件已经存在,则打开失败14打开文件例子:fstreamf1;f1.open("d:\\vc\\test1.txt",ios::in);fstreamf2;f2.open("d:\\vc\\test2.txt",ios::out|ios::trunc);15几点说明:(1)在实际使用过程中,可根据需要将以上打开文件的方式用“|”组合起来。如:ios::in|ios::out表示以读/写方式打开文件ios::in|ios::binary表示以二进制读方式打开文件ios::out|ios::binary表示以二进制写方式打开文件ios::in|ios::out|ios::binary表示以二进制读/写方式打开文件(2)如果未指明以二进制方式打开文件,则默认是...