版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第12章 文 件 处 理,12.1 文 件 简 介 12.2 文 件 和 流 12.3 顺序文件的访问 12.4 随机文件的访问,12.1 文 件 简 介,C+的文件一般指存储在外部介质上的数据集合。 这里的外部存储介质一般特指磁盘,磁盘上的文件称为磁盘文件。对磁盘文件的输入/输出简称为文件I/O。 每个文件都对应一个文件名,,文件名由文件主名和扩展名两部分组成,它们之间用圆点分开。文件主名是由用户命名的一个有效的C+标识符,为了便于记忆和使用,一般使文件主名的含义与所存的文件内容相一致。 文件扩展名是由用户命名的13个字符组成,是有效的C+标识符,通常用它来区分文件的类型。,在C+程序中保存
2、数据的文件按存储格式分为两种类型,一种为ASCII码文件或文本文件,它的每一个字节存放一个ASCII代码,代表一个字符。另一种为内部格式文件或二进制文件,是把内存中的数据按其在内存中的存储形式原样输出到磁盘上存放。,12.2 文 件 和 流,C+语言把文件看作是一个字符(字节)的序列,即由一个一个字符(字节)的数据顺序组成。一个文件是一个字节流或二进制流。它把数据看作是一连串的字符(字节),而不考虑记录的界限。,这种以字节流或二进制流组成的文件被称为流式文件。以字符为单位进行操作增加了处理的灵活性。 为了进行文件I/O操作,C+定义了文件流。文件流是控制台流的扩展,是从控制台流类派生来的,它继
3、承了控制台流类的所有特点。文件流类根据自己的需求,增加了控制台流类所没有的特性。,文件流可分为3类:输入文件流ifstream、输出文件流ofstream以及输入/输出文件流fstream。 和其他高级语言一样,对文件的读写之前应打开该文件,在完成操作之后应及时关闭该文件。 调用相应流中的open成员函数或构造函数,按照一定的打开方式打开一个文件。,open的函数原型为: void open( const char* szName, int nMode, int nProt = filebuf:openprot ); 其中,szName是文件名,它可包含驱动器符和路径说明;nMode说明文件打
4、开的模式,表13.1给出了nMode的取值范围。 关闭任何一个流对象所对应的文件,就是用这个流对象调用close()成员函数即可。,12.3 顺序文件的访问,对文件的操作总是从文件指针位置开始顺序向后移动,所以称之为顺序文件。 12.3.1 建立顺序访问文件 1. 建立文本文件,【12.1】使用操作器、设置标志位和成员函数向输出文件中输出文本。 #include #include #include void main(void) fstream output;,output.open(d:datatest.dat,ios:out); if(output.fail() cerrCan not o
5、pen test.datendl; /打开文件错误时,给出错误提示 abort(); /终止程序运行 ,outputsetiosflags(ios:left)setw(13)Namesetw(10)Class setw(10)Ageendl; outputsetiosflags(ios:left)setw(13)Zhang Sansetw(10)10 setw(10)21endl; outputsetiosflags(ios:left)setw(13)Li Sisetw(10)10 setw(10)19endl;,outputsetiosflags(ios:left)setw(13)Wang
6、Wusetw(10)10 setw(10)20endl; outputsetiosflags(ios:left)setw(13)Zhao Liusetw(10)10 setw(10)22endl; for(char ch=a;ch=z;ch+) output.put(ch); output.write(n1234567890,11); output.close(); ,输出到d:datatest.dat文件中的数据为: NameClassAge Zhang San1021 Li Si1019 Wang Wu1020 Zhao Liu1022 abcdefghijklmnopqrstuvwxyz
7、 1234567890,2. 建立二进制文件 为执行二进制文件操作,必须首先使用ios:binary模式指示符打开文件。,【12.2】打开一个二进制文件并向其中写入数据。 #include #include void main(void) fstream output; output.open(d:databinary_data.dat,ios:out|ios:binary);,if(!output) cerrCan not open binary_data.datendl; abort(); ,double x=3.1415926,6.2831852,9.4247778,12.5663704
8、,15.707963; for(int i=0;i5;i+) output.write(char*) ,12.3.2 读取顺序文件中的数据 1. 读取文本文件 【12.3】读取文件内容到显示器。 #include #include void main(void) fstream input(d:datatest.dat,ios:in);,if(input.fail() cerrCan not open test.datendl; abort(); while(!input.eof() cout.put(char)input.get(); ,2. 读取二进制文件 【12.4】读写二进制文件。该程
9、序先打开输入文件,在文件中输入二进制数据,关闭文件。然后再打开该文件,从中读二进制数据并显示在屏幕上。 #include #include #include ,void main(void) fstream output; output.open(d:databinary_data.dat,ios:out|ios:binary); if(!output) cerrCan not open binary_data.datendl; abort(); ,double x=3.1415926,6.2831852,9.4247778,12.5663704,15.707963; for(int i=0;
10、i5;i+) output.write(char*),if(input.fail() cerrCan not open binary_data.datendl; abort(); ,for(i=0;i5;i+) input.read(char*) ,运行程序,输出结果为: 3.1415926 6.2831852 9.4247778 12.5663704 15.707963,12.3.3 更新顺序文件中的数据 对于一个已经存在的文件,可以用添加的方式修改文件的内容。,【12.5】在文件d:datatest.dat尾部输出一行字符:Liu Ba 10 18 #include #include #i
11、nclude void main(void) fstream output; output.open(d:datatest.dat,ios:app);,if(output.fail() cerrCan not open test.datendl; abort(); outputsetiosflags(ios:left)setw(13)Liu Basetw(10)10 setw(10)18endl; output.close(); ,12.4 随机文件的访问,12.4.1 建立随机访问文件 通过控制文件指针的定位,程序可以对文件中某一特定位置进行读写操作。 这就是所谓的随机访问文件。,【12.6
12、】随机文件的建立和存取。假定有10名学生的姓名、学号、年龄、性别、总成绩等数据,假定需要读取第1、3、5、7、9个学生的数据。 #include #include struct student_info, char name20; int num; int age; char sex; double score; ;,void main(void) student_info cls1= zhao,1,20,M,290.5, qian,2,19,M,282.5, sun,3,20,F,288.5, li,4,21,M,275.5, zhou,5,22,M,256.5,wu,6,20,F,289.
13、5, zheng,7,19,M,265.5, wang,8,20,F,278.5, feng,9,21,F,268.5, chen,10,20,F,287.5, ; fstream inout(random.dat,ios:out|ios:in|ios:binary);,if(!inout) cerrCan not open random.datendl; abort(); ,for(int i=0;i10;i+) inout.write(char*),inout.read(char*) ,运行程序,输出结果为: zhao120M290.5, sun320F288.5, zhou522M256
14、.5, zheng719M265.5, feng921F268.5,12.4.2 读取随机文件中的数据 【12.7】在一个文件中存入一串整型数据,根据屏幕提示输入序号,显示文件指针的位置和数据。 #include #include ,void main(void) fstream inout(random_r.dat,ios:out|ios:in|ios:binary); if(!inout) cerrCan not open random_r.datendl; abort(); ,for(int i=0;in; inout.seekg(n*sizeof(int),ios:beg);,cout
15、The positon of file pointer after read is: inout.tellg()endl; inout.read(char*) ,运行程序,输出结果为: Please type in a number:between 0-99 8(注:此数据为用户通过键盘输入的,输入完毕请回车) The positon of file pointer after read is: 32 The data you read is: 8,12.4.3 数据写入随机文件 【12.8】程序先建立一个随机文件,然后将指定位置的数据用新数据代替,最后显示写入的数据。 #include #include ,void mai
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 医学26年:中枢神经系统血管炎 查房课件
- 医学26年:内分泌护理科研要点 查房课件
- 2026 减脂期无糖饮料课件
- 2026 减脂期喝水策略优化课件
- 血气分析在精神科患者中的应用
- 面部护理的防晒知识
- 食道癌护理的未来发展趋势
- 老年人突发疾病应急处理流程
- 重症医学科护理团队建设与管理
- 静脉溶栓治疗中的疼痛管理
- 外墙真石漆招标文件
- 悬挑式卸料平台监理实施细则
- 加油站公共安全风险评估报告
- 铸件(原材料)材质报告
- 提货申请单表
- 脑与认知科学概论PPT(第2版)完整全套教学课件
- 【初中化学】中国化学家-李寿恒
- 镭雕机作业指导书
- 生管指导手册(什么是PMC)
- 历届全国初中数学联赛真题和答案
- 国家义务教育监测八年级模拟试题(音乐)
评论
0/150
提交评论