




已阅读5页,还剩16页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第九章流类库和输入 输出 文件是存储在磁盘 磁带等外部设备上数据集合 每一个文件都必须有一个唯一名字 使用文件前必须首先打开文件 使用后必须关闭文件 对文件的操作时通过文件流类完成的 文件流类在流与文件之间建立连接 使用这些文件流类必须用 include编译指令将fstream h包含进来 数据从一个对象到另一个对象的传送被抽象为 流 数据的输入 输出就是通过输入 输出流来实现的 流是一种抽象的概念 负责在数据的产生者和数据的使用者之间建立联系 并管理数据的流动 9 1C 的基本流类体系 流类体系 以抽象类模板ios为基类 流类模板派生体系见图 整个流类模板体系的标准I O在头文件中说明 它包含头文件 和 而输入输出文件流部分在头文件中说明 主要输入 输出流模板层次 9 2文件的输入与输出 本节中文件指的是磁盘文件 C 根据文件 file 内容的数据格式 可分为两类 二进制文件和文本文件 文本文件由字符序列组成 也称ASCII码文件 在文本文件中存取的最小信息单位为字符 character 而二进制文件中存取的最小信息单位为字节 Byte C 把每一个文件都看成一个有序的字节流 见图9 2 每一个文件或者以文件结束符 endoffilemarker 结束 或者在特定的字节号处结束 文件的基本概念 9 2文件的输入与输出 当打开一个文件时 该文件就和某个流关联起来了 对文件进行读写实际上受到一个文件定位指针 filepositionpointer 的控制 输入流的指针也称为读指针 每一次提取操作将从读指针当前所指位置开始 每次提取操作自动将读指针向文件尾移动 输出流指针也称写指针 每一次插入操作将从写指针当前位置开始 每次插入操作自动将写指针向文件尾移动 9 2 1文件的打开与关闭 9 2 2文本文件的读写 9 2 3二进制文件的读写 9 2 4文件的随机访问 9 2 1文件的打开与关闭 文件使用步骤 1 说明一个文件流对象 这又被称为内部文件 ifstreamifile 只输入用ofstreamofile 只输出用fstreamiofile 既输入又输出用 2 使用文件流对象的成员函数打开一个磁盘文件 这样在文件流对象和磁盘文件名之间建立联系 文件流中说明了三个打开文件的成员函数 voidifstream open constchar int ios in int filebuf openprot voidofstream open constchar int ios out int filebuf opernprot voidfstream open constchar int int filebuf openprot 第一个参数为要打开的磁盘文件名 第二个参数为打开方式 有输入 in 输出 out 等 打开方式在ios基类中定义为枚举类型 第三个参数为指定打开文件的保护方式 一般取默认 所以第二步可如下进行 iofile open myfile txt ios in ios out 文件打开方式 是由在ios类中定义的公有枚举成员决定 enumopen mode in 0 x01 out 0 x02 ate 0 x04 app 0 x08 trunc 0 x10 binary 0 x80 ios in打开文件进行读操作ios out打开文件进行写操作ios ate打开时文件指针定位到文件尾ios app添加模式 所有增加都在文件尾部进行ios trunc如果文件已经存在则清空源文件ios nocreate如果文件不存在则打开失败ios noreplace如果文件存在则打开失败ios binary二进制文件 非文本文件 Mode的符号常量可以用位或运算 组合在一起 如 ios in ios binary只读方式打开二进制文件对于ifstream流 mode默认方式是ios in 对于ofstream流 mode默认方式是ios out 打开方式解释 Port决定文件的访问方式0普通文件2隐含文件1只读文件4系统文件 三个文件流类都重载了一个带默认参数的构造函数 功能与open函数一样 ifstream ifstream constchar int ios in int filebuf openprot ofstream ofstream constchar int ios out int filebuf openprot fstream fstream constchar int int filebuf operprot 所以1 2两步可合成 fstreamiofile myfile txt ios in ios out 打开文件也应该判断是否成功 若成功 文件流对象值为非零值 不成功为0 NULL 文件流对象值物理上就是指它的地址 因此打开一个文件完整的程序为 fstreamiofile myfile txt ios in ios out if iofile cout 不能打开文件 myfile txt endl return 1 失败退回 使用提取和插入运算符对文件进行读写操作 或使用成员函数进行读写 输出流函数 getread Put函数该函数把一个字符写到输出流中 Cout A cout put A get函数该函数的功能与提取运算符号 相似 主要的不同点get函数在读取数据时包括空白字符 而 在默认情况下拒绝接受空白字符 Write函数该函数把内存中的一块内容写到一个输出文件流中 长度参数指出写的字节数 该函数遇到空字符时并不停止 因而能够写入完整的类结构 该函数带2个参数 一个char型指针 指向内存数据的起始地址 和一个所写的字节数 注意在该结构的对象地址之前要char做强制类型转换 read函数该函数从一个文件读字节到一个指定的存储器区域 由长度参数确定要读的字节数 虽然给出长度参数 但当遇到文件结束或者在文本模式文件中遇到文件结束标记时读结束 关闭文件 三个文件流类各有一个关闭文件的成员函数 voidifstream close voidofstream close voidfstream close 使用很方便 如 iofile close 关闭文件时 系统把该文件相关联的文件缓冲区中的数据写到文件中 保证文件的完整 收回与该文件相关的内存空间 可供再分配 把磁盘文件名与文件流对象之间的关联断开 可防止误操作修改了磁盘文件 如又要对文件操作必须重新打开 关闭文件并没有取消文件流对象 该文件流对象又可与其他磁盘文件建立联系 文件流对象在程序结束时 或它的生命期结束时 由析构函数撤消 它同时释放内部分配的预留缓冲区 例1分析以下程序的运行结果 对文本文件的读写直接使用插入运算符 和提取运算符 include includeintmain ofstreamofile test 打开test文件用于写 即输出ofile open if ofile cout str 与get不同 遇到空格时结束ifile close cout str endl return1 9 2 2文本文件的读写 intmain charch ifstreamsfile d 1 cpp ofstreamdfile d 2 cpp 只能创建文件 不能建立子目录 如路径不存在则失败if sfile cout ch dfile ch sfile close 如没有这两个关闭函数 析构函数也可关闭dfile close return0 例2分析以下程序的运行结果 例3编写一个程序 将文本文件abc txt复制到文本文件xyz txt解 使用输入流成员函数get 从文本文件abc txt中读取一个字符ch 然后使用输出流成员函数put 将字符ch写入文本文件xyz txt中 继续这一过程直到get 读完为止 程序如下 include includeintmain ifstreamifile abc txt if ifile cout abc txt文件不能打开 endl return0 ofstreamofile xyz txt if ofile cout xyz txt文件不能打开 endl return0 charch while ifile get ch ofile put ch ifile close ofile close return1 例4编写一个程序建立一个输出文件流 并将一个Date结构体变量的二进制值写到该文件中 解 对二进制文件的读写可以采用2种方法 一种是使用get put 另一种是使用read 和write 定义一个结构体Date变量dt并初始化 通过write语句将其写入到文件data dat中 程序如下 includestructDate intmo da yr voidmain Datedt 2 20 2001 ofstreamofile data dat ios binary ofile write char 9 2 3二进制文件的读写 每一个文件都有两个指针 一个是读指针 指示输入操作当前在文件中的位置 另一个是写指针 指示下次写操作的当前位置 C 语言的文件不仅可以按这种顺序方式进行读 写 而且可以随机地移动文件的读写指针 1 输出流随机访问函数 一个输出文件流保存一个内部指针以指出下一次写数据的位置 输出流随机访问函数有seekp 下一次写数据的位置 和tellp返回seekp 函数指针值 seekp 偏移量 参照位置 beg 0 文件开头cur 1 文件指针的当前位置end 2 文件结尾偏移量 被定义为long型 以字节数为单位 9 2 4文件的随机读写 2 输入流随机访问函数 在输入流文件中 保留着一个指向文件中下一个将要读数据的位置的内部指针 可以用seekg 来设置这个指针 和tellg 返回当前文件读指针的位置 seekg 偏移量 参照位置 beg 0 文件开头cur 1 文件指针的当前位置end 2 文件结尾偏移量 被定义为long型 以字节数为单位 使用seekg可以实现面向记录的数据管理系统 用固定长度的记录大小乘以记录号便得到相对于文件头的字节位置 然后使用get读这个记录 例5编写一个程序 在文件city dat中输入几个城市的名字和区号 并根据用户输入的区号查找对应
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年互联网企业校招面试常见问题与答案
- 2025年电梯安全管理制度
- 轻型钢结构安装与调试方案
- 屠宰场选址与环境影响评估
- 分布式光伏电力调度与优化方案
- 电商售后服务质量提升策略2025年研究报告:售后服务培训与发展
- 废弃矿井资源再利用技术产业政策环境与市场前景分析报告
- 2025年城市轨道交通建设与智能化运营优化研究报告
- 部编版人教版四年级语文上册课时分配计划
- 2025-2030年技术创新驱动的风电市场潜力分析报告:聚焦新能源应用场景
- 2024住院患者静脉血栓栓塞症预防护理与管理专家共识要点(全文)
- 七上人教地理新教材教学计划 2024-2025学年七年级地理上册(人教版2024)
- 一年级弟子规
- 卫生院三定方案
- 新人教版高中物理选择性必修第一册课时作业及答案
- 小学数学解题研究(小学教育专业)全套教学课件
- 个体诊所备案信息表
- 小提琴培训行业市场前瞻与未来投资战略分析报告
- 高职大学生心理健康教育 第四版 课件 第四单元 和谐人际关系
- InDesign印前设计与实战 课件 第二章 印前设计版面概述-印刷基础知识
- 员工培训体系优化研究
评论
0/150
提交评论