ImageVerifierCode 换一换
格式:DOCX , 页数:17 ,大小:44.33KB ,
资源ID:11155794      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/11155794.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(92 文件和文件流.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

92 文件和文件流.docx

1、92 文件和文件流9.2 文件和文件流1. 目标概述 5分钟 22. 回顾 5分钟 23. 课程知识点讲解 23.1. 文件的基本概念 5分钟 23.2. 文件流类与文件流对象 3分钟 33.3. 文件的打开与关闭 20分钟 33.4. 文本文件的读写 20分钟 53.5. 二进制文件的读写 15分钟 63.6. 文件指针 15分钟 73.7. 随机访问二进制文件 15分钟 73.8. 任务解决 30分钟 84. 精练 45分钟 85. 小结 2分钟 86. 技能提升 90分钟 107. 考核点 118. 作业答案 119. 扩展练习 1110. 学生问题汇总 1111. 教学后记 12本节目

2、标 本节中将讲述如下主要内容: 文件的基本知识 文件流的基本知识 文件的打开与关闭 文本文件的读写 二进制文件的读写 随机访问二进制文件 通过教学使学生掌握文件和文件流的使用。本节重点 文件和文件流的基本知识 文件的打开与关闭和读写 二进制文件的读写 随机访问二进制文件本节难点 文件的读写授课课时 6课时教法建议目标概述 5分钟本节主要讲述文件和文件流。提出本节的任务。回顾 5分钟回顾上一节的相关内容。课程知识点讲解文件的基本概念 5分钟引入:前面的程序设计中,都是以系统的标准设备进行输入/输出,但这种方式最大的缺点就是无法长久保存数据,实际应用中,通常需要利用磁盘等存储介质,以文件的形式来保

3、存数据。什么是“文件”(File)?主题:文件是指以一定格式存储在外部存储器(相对于CPU而言)上的数据集合。这里的“外部存储器”可以是指硬盘、光盘、U盘等各类存储介质,因此可以根据存储介质的不同的将文件分为硬盘文件、光盘文件、U盘文件等。这里的“一定格式”是指文件存储时的组织方式,通常可分为ASCII码文件与二进制文件两种方式。ASCII文件又称文本(Text)文件或字符文件,因为它的每一个字节都存放一个ASCII码,代表一个字符,这类文件可以直接阅读。二进制文件又称为内部格式文件或字节文件,因为它的每个字节存放的都是二进制的数据,是把数据按其在内存中的形式原样存放到磁盘上,常见的扩展名为“

4、.EXE”与“.COM”文件都是典型的二进制文件。文件流类与文件流对象 3分钟引入: 文件流是以外存文件作为输入输出对象的数据流,与标准输入输出流相比只是操作对象发生了变化,而操作方法则变化不大。主题:头文件fstream中包括3个流类:ifstream用于支持从文件中读入数据;ofstream用于支持向文件中写入数据;fstream用于支持对文件进行双向的读写操作。因此在使用文件流应在程序中包含下列语句:#include 在了解用于支持文件读写的类后,如需进行文件操作,则应根据需要定义流对象。与标准输入输出有预定义对象不同的是,文件操作没有预定义对象,因此需要程序员根据需要自行定义。文件的打

5、开与关闭 20分钟引入: 主题:任何关于文件的操作都要先打开文件,再对文件进行读写,操作完毕后,要关闭文件。 打开磁盘文件打开(Open)文件是指在文件读写之前做必要的准备工作,就象要往抽屉里存放东西,必须先把抽屉打开一样。打开文件的准备工作包括:(1) 将文件流对象与指定的磁盘文件关联起来,即指明要操作哪个文件(2) 指定对文件的工作方式。如,该文件是作为输入文件还是输出文件,是ASCII码文件还是二进制的文件。打开磁盘文件的工作可以通过两种不同的方法实现:1调用文件流的成员函数open成员函数Open可以用于打开文件,其函数原型如下void open(const char *filenam

6、e, int mode, int prot=filebuf:openprot);其中“filename”是文件名,注意这里的文件名可以带路径名,也可以不带。如果不带路径名则使用当前目录作为指定文件的存放目录。如果带路径名要注意要以“”来表示目录分隔符,如C盘根目录应写为“C:”。“mode”说明文件的输入输出方式,对文件操作的影响重大,下表列出了在ios类中定义了多种输入输出方式。“prot”表示打开文件的属性,取值见表,默认为0。方式说明ios:in以输入方式打开文件,只能执行读操作ios:out以输出方式打开文件,只能执行写操作。这是默认方式,如果要打开的文件已存在,则其清除全部原有内容i

7、os:app以输出方式打开文件,写入的数据添加在文件尾,每次写操作都定位在文件的最末尾ios:ate打开一个已有的文件,立刻定位到文件末尾(但不保证每次操作都在文件末尾)ios:trunc打开一个文件,如果文件已存在,则删除其中全部数据,如文件不存在,则建立一个空的新文件ios:binary以二进制的方式打开文件,如果不指定此方式,默认打开方式为ASCII方式ios:in | ios:out以输入和输出方式打开文件,可同时对文件执行读写操作ios:in | ios:binary以二进制的方式打开一个输入文件ios:out | ios:binary以二进制的方式打开一个输出文件文件属性取值表0

8、普通文件1 只读文件2 隐含文件4 系统文件说明:对于ifstream流,mode的默认值是ios:in;对于ofstream流,mode的默认值是ios:out。每个打开的文件都有一个文件指针,该指针的初始位置由I/O方式确定,每次读写都从文件指针的当前位置开始,每读入一个字节,指针就后移一个字节。当文件指针移到最后,就会遇到文件结束标志EOF(End Of File,占一个字节,其值为-1),这时流对象的成员函数eof的值为非0值,表示文件结束。可以用位或“|”运算符对输入输出方式进行组合。如果打开文件失败,则文件流对象无法和指定文件建立关联,则流状态标志中的failbit、badbit或

9、hardbit将置为1,并且在ios类中重载运算符“!”使其可以返回非0值,据此可以判断打开文件是否成功。示例讲解:示例9.2.1 演示如何使用open函数打开文件,程序首先定义一个文件输出流对象,接下来使用open函数以写二进制文件的方式打开C盘下的test.dat文件。分析与解答:具体见P4212在定义文件流对象时指定参数在文件流类中定义了带参数的构造函数,其中包含了打开磁盘文件的功能。因此可以在定义文件流对象时指定参数,调用文件流类的构造函数来实现打开文件的功能。则程序ofstream out;out.open(C:test.dat,ios:out | ios:binary);可以改为o

10、fstream out(C:test.dat,ios:out | ios:binary);第二种方式与第一种方式作用相同,但更为简捷,方便。 关闭文件如同在抽屉中存放完物品,会将抽屉关上一样,在对文件使用完毕后,也应关闭文件。关闭文件可以使用成员函数close完成。这里的“关闭 ”实际上执行与打开文件相反的操作,即解除文件流与磁盘文件的关联关系,并使原有的工作方式失效。关闭文件后,就不能再通过该文件流对该文件执行读写操作了,但可以通过open函数再次建立关联关系。文本文件的读写 20分钟引入: 主题:在本节的开始已经介绍过文本文件的概念和存储方式,对文本文件的读写操作有以下两种方法: 1利用流

11、插入运算符“”来输入输出标准类型的数据。从流的层次结构图9.1.2中可以知道ifstream和ofstream分别是istream和ostream的派生类,因此继承了公用重载函数流插入运算符“”,可以如同用cin,cout对标准设备进行读写一样,使用文件流插入流插入运算符“”对磁盘文件进行读写。示例讲解:示例9.2.2实现对下列基本数据的读写:整数:123 456 789浮点数: 59.5 60.1字符串:James分析与解答:具体见P4232使用文件流的put,get,getline等成员函数进行字符的输入/输出这些成员函数的用法也与标准输入输出流中的函数用法一致,区别仅仅是将cout与ci

12、n对象改为自定义的文件流对象。示例讲解:示例9.2.3 编写一个程序从键盘接收多行数据,直到输入$符为止,将数据存入文本文件。再从文件中读出数据在屏幕显示,并将所有小写字符转为大写字符。分析与解答:具体见P425练习:练习9.2.1 改写程序9_2_S_3,要求在最后显示文件中的大写字母的个数。 其结果应如图所示解决:见solution-code/E9-2-1.cpp二进制文件的读写 15分钟引入: 主题:二进制文件由于在存储形式上与文本文件有着根本不同,文本文件以ASCII码方式进行存储,而二进制文件是将内存数据不加转换的进行存储,因此在二进制文件的读写上与文本文件有以下不同之处:(1)在打

13、开文件时,要指明文件的存储方式为ios:binary(2)不能使用流插入运算符“”,及字符类型的输入与输出成员函数,因为这些函数为自动将读写内容转换为字符型数据,从而推动了二进制文件的特点。读写二进制文件应使用流的成员函数read和write,下面将再次介绍这两个函数的使用。函数的声明形式为istream& read(char * buffer, int len);ostream& write(const char * buffer, int len);字符指针buffer指向内存中一段存储空间。这里之所以定义为字符指针,是因为一个字符占用一个字节,这样可以保证在读写数据是逐字节读出或写入。所

14、以如果使用的变量不是字符指针类型在使用时需要将其强制转换。len是读写的字节数,一般不直接给出数值,而是使用sizeof运算符(请参看第1章扩展阅读sizeof运算符一节)求出字节数。二进制文件的读写通常用于自定义数据类型的读写。示例讲解:示例9.2.4二进制文件的读写演示分析与解答:具体见P427文件指针 15分钟引入: 主题:在C+的文件流类中为了方便管理对文件的读写操作,设定了两个整数值用于指明当前应进行读写操作的位置,分别称为:1get指针:指明下一次进行读操作时,在文件中的开始位置;每成功读出一个字节,将自动后移一位。2put指针:指明下一次进行写操作时,在文件中的开始位置;每成功写

15、入一个字节,将自动后移一位。与文件指针有关的函数共6个,分两类,第一个类是与get指针有关: tellg():用于返回当前get指针的值 seekg(long pos):将get指针移到指定位置pos seekg(long len, long pos):将get指针从指定位置pos,移动指定个数(len)的字节“pos”可以是通常取以下3个在ios中的预定义值: ios:beg文件开头(beg是begin的缩写),这是默认值 ios:cur get指针的当前位置(cur是current的缩写) ios:end 文件尾“len”可以为正数,也可以为负数,正数表示向后移,直到移到文件尾为止;负数表

16、示前移,直到移到文件头为止。第二类是与put指针有关的函数 tellp():用于返回当前put指针的值 seekp(long pos):将put指针移到指定位置pos seekp(long len, long pos):将put指针从指定位置pos,移动指定个数(len)的字节这类函数的用法与上述get指针中几个函数的用法一样,只是定位的是put指针的位置而已。举例随机访问二进制文件 15分钟引入: 前面所介绍的文件读写都是按顺序进行的,即逐个字节的进行。但是对于实际应用中的二进制文件往往需要对数据文件进行随机访问,如在文件中修改记录信息,以及按指定条件查询保存在数据中的记录。主题:在了解了文

17、件指针的概念后,随机访问,实际上是要操作文件指针,根据需要将其定位在要读写的位置,再利用read,write函数进行读写即可。示例讲解:示例9.2.5二进制文件随机访问演示分析与解答:具体见P431任务解决 30分钟任务: 由于现有HNS软件学院的图书管理系统,没有使用文件系统,造成大量的中间数据和操作结果无法保存。因此系统分析部决定对该系统进行升级改造,通过使用文件I/O技术,使系统可以实现对图书和用户数据的存储,现指派您完成如下任务:1使用文件系统存储图书数据,实现对图书数据的新增、修改、查询;2使用文件系统存储用户数据,实现对用户数据的新增、修改、查询。分析与解决:具体见P434-439

18、精练 45分钟任务:请您根据本节所学的知识,参照任务1的解决方法,编写相应的程序实现对用户的管理,解决任务2。要求:1.将用户定义为一个用户类User2.使用二进制文件存储User类型的记录,实现新增、查询、和修改功能解决:具体见P9-2.cpp小结 2分钟通过本节的学习,您理解了文件的概念,掌握了使用文件流对象及其成员函数对文件进行读取的方法,并能运用所学的文件I/O知识来解决实际问题,下面将本节的主要内容归纳如下:1文件的基本概念文件是指以一定格式存储在外部存储器(相对于CPU而言)上的数据集合,根据其存储格式的不同可以分为ASCII码文件和二进制文件,根据存储介质的不同可以分为硬盘文件、

19、光盘文件、U盘文件。2文件流类与文件流对象文件流是指以外存文件作为输入输出对象的数据流,其主要的流类有3个:ifstream用于支持从文件中读入数据;ofstream用于支持向文件中写入数据;fstream用于支持对文件进行双向的读写操作3文件的打开与关闭任何关于文件的操作都要先打开文件,再对文件进行读写,操作完毕后,要关闭文件。用文件流对象打开文件时有两种方式:调用文件流的成员函数open在定义文件流对象时指定参数关闭文件使用close函数。4文件的读写文件的读写根据文件存储方式的不同,可以分为文本文件的读写和二进制文件的读写,根据访问顺序的不同可以分为顺序访问与随机访问,可以读写时数据类型

20、的不同可以为基本数据类型的读写与自定义类型的读写。文本文件的读写一般都是顺序进行的,其操作的数据也都是基本数据类型,因此主要使用两种操作方法:用流插入运算符“”输入输出基本数据类型用文件流的put,get,getline等成员函数进行字符类型的输入/输出二进制文件由于在存储形式上与文本文件有着根本不同,因此其在文件的打开方式上,读写使用的成员函数上都有所不同:在打开二进制文件时,要指明文件的存储方式为ios:binary读写二进制文件应使用流的成员函数read和write5文件指针在C+的文件流类中有两个文件指针,get指针与put指针分别用于文件的读写操作,可以使用下列函数来定位与获取两个指

21、针的值: tellg():用于返回当前get指针的值 seekg(long pos):将get指针移到指定位置pos seekg(long len, long pos):将get指针从指定位置pos,移动指定个数(len)的字节 tellp():用于返回当前put指针的值 seekp(long pos):将put指针移到指定位置pos seekp(long len, long pos):将put指针从指定位置pos,移动指定个数(len)的字节6随机访问二进制文件可以结合文件指针定位函数与read、write函数来对二进制文件实现随机访问,其一般步骤如下:(1) 正确使用文件流类及设置关联文件

22、的工作方式(2) 正确计算好每次访问时指针的定位(3) 正确执行文件的读写操作技能提升 90分钟任务:HNS软件学院的系统开发部目前正在为该院的图书馆开发一套图书管理系统,现已进入到了实现阶段。要求实现一个在界面上具有字符菜单提示,可以保存图书和用户资料数据的图书馆系统。现指派您在以前各章的开发基础上完成图书和用户的管理工作,其具体任务如下:1编写图书管理模块; 要求实现图书的新增,修改,查询,借书,还书功能2编写用户管理模块 要求实现用户的新增,修改,查询及登陆功能3编写界面显示模块分析:1定义相关类至少应包括:Book书籍类User 用户类BookManager 系统管理类具体实现可参照第

23、7章2为类增加文件存储的相关功能(1) Book类中应增加下列方法bool saveToFile();/存盘bool readFromFile(long pos)/读数据pos为在文件中位置(2) 用户类中应增加下列方法bool saveToFile();/存盘bool readFromFile(long pos)/读数据pos为在文件中位置其他方法的具体要求请参照本书的其他章节。解决:具体见9-2-A1.cpp演示:目标: 提高学生的表达能力,语言应用能力和自信力 展示所完成的任务要求: 学生应当使用面向对象的方法完成上述任务; 普通话应尽可能标准流畅,不得使用方言 需要结合本章的重点进行讲

24、解考核点 考核点1:文件和文件流的概念和使用 考核点2:二进制文件的操作作业答案 1:有如下表格,要求编写一个程序实现以下功能, 新增功能:从键盘接收数据,并保存在文件中 查询功能:给定姓名,查询身份证号码以上功能可重复使用,直到输入Q时,退出程序。 答:solution-code/9-2-T1cpp 2:编写程序实现文件的备份功能(将原文件复制,并更改文件扩展名为.bak) 答:solution-code/9-2-T2.cpp 3:编写程序实现两个文件的合并功能。答:solution-code/9-2-T3.cpp扩展练习 学生问题汇总(注:汇总学生在学习过程中容易出现的问题) 教学后记(注:在此写上个人在授课过程中所遇到的教案中所没有涉及到的特殊问题及其解决方法或解决方案,也可以总结自己的授课体会,课程体系、教材的不足等。)授课教师(签名): 授课时间: 授课班级:

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1