21天学通C++-第十五章-文件

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

联系方式:北京源智天下科技有限公司第十五讲:文件杨章伟e-mail:jtclass@163.com1-2北京源智天下科技有限公司联系方式:课程内容安排•文件和流•文件的打开与关闭•文件的顺序读写•文件的随机读写•综合练习•思考和习题1-3北京源智天下科技有限公司联系方式:文件和流•文件是一系列字符数据的有序集合,按组织形式可分为文本文件和二进制文件两种。C++的文件把数据看作是一连串的字符,不考虑纪录的界限,认为其是一个字符流或二进制流,称为流式文件,增加了处理的灵活性。1-4北京源智天下科技有限公司联系方式:文件的分类•在计算机中,文件随着分类标准的不同可分为不同的类型。按照文件的存取方式及其组成结构来分可以分为两种类型:顺序文件、随机文件。•顺序文件:结构较简单,文件中的记录一个接一个地存放。在这种文件中,只知道第一个记录的存放位置,其它记录的位置无从知道。当要查找某个数据时,只能从文件头开始,一个记录一个记录地顺序读取,直到找到为止。•随机文件:又称直接存取文件,简称随机文件或直接文件。随机文件的每个记录都有一个记录号,在写入数据时只要指定记录号,就可以把数据直接存入指定位置。而在读取数据时,只要给出记录号,就可直接读取。1-5北京源智天下科技有限公司联系方式:文件的功能•文件在程序中为输入设备和输出设备承担着缓冲的功能,一般程序中,文件在程序中的作用如图15-1所示。1-6北京源智天下科技有限公司联系方式:文件流类•文件流是一个I/O中非常重要的一个内容,它的输入是指从磁盘文件流向内存,它的输出是指从内存流向磁盘。C++中提供了三个文件流类:ofstream,ifstream,fstream,其中,fstream是ofstream和ifstream多重继承的子类,文件流类的关系如图15-2所示。1-7北京源智天下科技有限公司联系方式:文件的打开与关闭•C++中,要进行文件的输入输出,必须先创建一个流,再把这个流与文件相关联,即打开文件,才能进行输入输出操作,完成后要关闭文件。前面提到了C++中的三个输入输出流类ofstream,ifstream和fstream,其同属于ios类,可访问在ios类中定义的所有操作。与此相对应,为了执行文件的输入输出操作,C++还提供了三个输入输出流,即输入流、输出流和输入输出流。1-8北京源智天下科技有限公司联系方式:打开文件•打开文件,就是用函数open()把某一个流与文件建立联系。open()函数是上述三个流类的成员函数,定义在fstream.h头文件中,它的原型为:•voidopen(constunsignedchar*,intmode,intdcces=filebuf::openprot);1-9北京源智天下科技有限公司联系方式:关闭文件文件使用完后,必须关闭,否则会丢失数据。关闭文件就是将文件与流的联系断开,关闭文件用函数close()完成,其也是流类中的成员函数,没有参数,没有返回值,其参数原型为:对象名.close()1-10北京源智天下科技有限公司联系方式:文件的顺序读写首先介绍文本文件的读写。对文本文件进行读写时,先要以某种方式打开文件,然后使用运算符“”和“”进行操作就行了,只是必须将运算符“”和“”前的cin和cout用与文件相关联的流代替。1-11北京源智天下科技有限公司联系方式:文本文件应用示例该范例实现对一个文本文件的多种操作,包括求文件长度、统计单词等功能。1-12北京源智天下科技有限公司联系方式:读写二进制文件任何文件,都能以文本方式或二进制方式打开。对以二进制方式打开的文件,由两种方式进行读写操作,一种是使用函数get()和put(),另一种是使用函数read()和write()。1-13北京源智天下科技有限公司联系方式:文件的随机读写随机读写是通过使用输入或输出流中与随机移动文件指针相关的成员函数,随意移动文件指针而达到随机访问。移动文件指针的成员函数主要有seekg()和seekp(),它们的常用原型为:isream&seekg(streamoffoffset,seek_dirorigin);osream&seekp(streamoffoffset,seek_dirorigin);1-14北京源智天下科技有限公司联系方式:综合练习•下面给出一个读写不同操作系统中文件的应用实例,该实例首先创建文件,写入数据后读取并显示在屏幕上。1-15北京源智天下科技有限公司联系方式:包含头文件3usingnamespacestd;//使用命名空间4#ifdefWIN32//预编译指令,如果为WIN32系统5#defineTEST_FILEtest.txt//指定文件名6#else7#defineTEST_FILE/tmp/test.txt//指定文件名和路径8#endif//结束条件编译9voidtest()//定义函数10{11//首先将文件内容写为123456789012{13//fstreamsfs;//调试使用的注释14//sfs.open(TEST_FILE,ios_base::out);15fstreamsfs(TEST_FILE,ios_base::out);//注意,文件是写入方式,会覆盖原来内容16charbuf[]=1234567890;//定义字符串并初始化17sfs.write(buf,sizeof(buf));//写入文件18sfs.close();//关闭文件19}20//下面读取文件内容并输出21{22intlen;//定义整型变量23char*buf;//定义字符串24//fstreamsfs;25//sfs.open(TEST_FILE);26fstreamsfs(TEST_FILE);//创建对象27sfs.seekg(0,ios::end);//定位到文件末尾28vlen=sfs.tellg();//返回地址,也就相当于获得文件的长度29sfs.seekg(0,ios::beg);//获取完毕之后,将文件指针提到前面30buf=newchar[len];//申请一段空间31sfs.read(buf,len);//读取文件内容到buf32coutbufendl;//输出在屏幕上33delete[]buf;//释放空间34sfs.close();//关闭文件35}36}37intmain(intargc,char*argv[])//带参数的main()函数38{39test();//调用test()函数40return0;//正常返回41}1-16北京源智天下科技有限公司联系方式:思考和习题•在C++语言中,二进制文件可以用来存放哪些数据类型的数据?•简述几种打开文件方式ios::in、ios::out、ios::app及ios::in|ios::out之间的区别。•如何判断打开文件操作是否成功?•函数close()实现什么操作?为什么完成对文件的操作后应及时关闭文件?•顺序访问文件与随机访问文件之间的区别是什么?•编写一个完整的C++程序,功能是读取一个文本文件的内容,并将文件内容以10行为单位输出到屏幕上,每输出10行就询问用户是否结束程序,不是则继续输出文件后面的内容。

1 / 16
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功