




已阅读5页,还剩34页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第14章 文件流和内存流,14.1 文件及文件流的基本概念 文件:程序+数据+文档,外部设备的总称(aaa.c null prn con) 14.1.1 输入和输出 内存向外存: 输出、写、存 外存向内存: 输入、读、取 14.1.2 文件的存储方式 ASCII码: 1024=49 48 50 52 =0100 1001 0100 1000 0101 0000 0101 0010 二进制存储方式: 1024 =0000 0100 0000 0000 文件流: 专门用于磁盘文件I/O的流类(专门用于磁盘文件I/O的类)。,14.1.3 文件流类体系 类filebuf用于管理文件的缓冲区。 类fstreambase提供了I/O所需要的所有成员函数。 类ifstream用于从文件中取(i)数据。 类ofstream用于向文件输出(o)数据。 类fstream用于文件的双向数据传递I/O)。 以上类的派生(产生)方法参看305页。,14.2 文件的打开与关闭 14.2.1 文件的打开 C+在文件流类中提供了4个文件的成员函数: void fstreambase:open(char *, int, int=filebuf :openprot) void ifstream :open(char *, int=ios : in, int) void ofstream : open(char *, int=ios : out, int) void fstream : open(char *, int, int),说明: 第一个参数是文件名,第二个参数是访问方式,第三个参数是保护方式。 在所有文件流的基类ios中,可以使用下列打开模式的公有枚举成员: in 0x01 输入 out 0x02 输出 ate 0x04 将指针置于文件未 app 0x08 追加 binary 0x80 打开二进制文件 一般情况,将几种模式组合使用。更多的成员参考306页。,例:打开一个文件result文件 ifstream infile; infile.open(“result”); 等价于: infile.open(“result”,ios :in); /打开输入文件 infile.open(“result”,ios :in | ios : : binary); /打开二进制输入文件,说明: 对于类ifstream的对象,打开文件时默认模式in。 对于类ofstream的对象,打开文件时默认模式out。 C+在文件类中提供的4个文件流类中同时重载一个带缺省参数的构造函数: void fstreambase :fstreambase (char *, int, int=filebuf :openprot) void ifstream :ifstream (char *, int=ios :out, int) void ofstream :ofstream (char *, int=ios :in, int) void fstream :fstream (char *, int, int) 定义对象时,同时也打开了一个文件。,4. 若文件打开出错,则返回一个NULL值。因此常常用下列格式提示出错: ifstream infile; infile.open(“result”); if (! infile) cour(“cannot open this file”); exit(1); 其中,exit(1) 为返回编辑状态,1可省。,14.2.2 文件的关闭 ifstream infile; infile.open(“result”); if (! infile) cour(“cannot open this file”); exit(1); infile. close();,14.3 文件的读写 使用两个读写运算符: 例14-1:模拟DOS命令,将*.cpp 再复制一份,新文件名为:* new.cpp 算法: 打开输入文件 打开输入/输出文件 文件复制 文件关闭,方法一: #include “fstream.h“ #include “iostream.h“ #include “stdlib.h“ void main(int argc,char *argv) if (argc!=3) cout“input error“endl; exit(1); ,ifstream infile(argv1); /定义对象并初始化,打开模式省 if (! infile) coutch) outfilech; infile.close(); outfile.close(); ,方法二: #include “fstream.h“ #include “iostream.h“ #include “stdlib.h“ void main(int argc,char *argv) if (argc!=3) cerr“input error“; exit(1); fstream infile,outfile; /先定义文件类对象 infile.open(argv1,ios:in); /不是构造函数,不能省略模式 outfile.open(argv2,ios:out);,if (!infile|!outfile) cerr“Cont open file “endl; exit(1); char ch; while (infile.get(ch) outfile.put(ch); infile.close(); outfile.close(); ,14.5 文件读写函数 14.5.1 二进制文件读写函数 istream 说明:第一个参数为内容,第二个参数为读写的字节数。,例14-2:用二进制读写函数完成文本文件的复制 #include #include “stdlib.h“ void main(int argc,char *argv) if (argc!=3) cerr“input error“; exit(1); fstream infile, outfile; infile.open(argv1,ios:in | ios:binary); outfile.open(argv2,ios:out | ios:binary);,if (! infile | ! outfile) /文件打开有错,对象为0 cerr“Cont open file “endl; exit(1); char ch1024; do infile.read(ch,1024); if(infile.eof() /文件结束为真 int n=infile.gcount(); /把最后不够1024字节时的字节取出 outfile.write(ch,n); break; ,else outfile.write(ch,1024); while(1); infile.close(); outfile.close(); ,例14-3:用二进制读写函数完成数据文件的写(p318) 生成10个数,进行排序,然后保存到文件中 #include #include “stdlib.h” #include #include #include “ex14_5.h” /见P314中,void main() int savedate(int *, int,char *); int *iarray; iarray=Generatedatas(10); /生成10个随机数 if (! iarray) /不成功时iarray为0 cerr”memory allocation error, press any key to exit n”; getch(); /按任意键返回 exit(1); ,sortdata(iarry,10); /排序,函数子程序见p315 savedata(iarray,10,”datas1.dat”); /保存排序后的数据 releasememory(iarray); /用后释放 int savedata(int *ip, int n, char *fname) ofstream of; of.open(fname, ios : : out | ios : : binary); if(!of) cerr”file creating eror !”endl; return 0; of.write(char *) ip,n*sizeof(int); /对数据指针强制转换成字符指针, 按字节数写入对象建立的文件 of.close(); return 1; ,int *Generatedate(int n) /因为返回的是指针,因此函数也是指针函数 int *ip; ip=new intn; if(!ip) return 0; randomize( ); /要使用头文件stdlib.h for(i=0;in;i+) ipi=rand( )%1000; return ip; void ReleasMemory(int *ip) delete ip;,例14-4:用二进制读写函数完成数据文件的读 #include #include void main() int loaddata(int *,char *); void showdata(int *, int); int iarray10,i; i=loaddata(iarray,”data1.dat”); /从文件中读数据到数组 showdata(iarray,i); /将读出的数据显示 ,int loaddata(int *ip, char *fname); ifstream ifs; int i=0; ifs.open(fname, ios: : in + ios : : binary); if (! ifs) cerr”file opening error !”endl; return 0; ,while(1) ifs.read((char *)ip, sizeof(int); /每次读两个字节且强制转换 if(ifs.eof() break; ip+; i+; /统计数据个数 return i; ,void showdata(int *ip, int n) for(int i=0; in; i+) coutipi” “; coutendl; 说明:以上函数使用了数组和指针之间的相互传递。,14.5.2 文本文件读写 例14-5:编写,将任意程序中的标识符取出显示的函数程序 #include #include “ctype.h” void Getident(ifstream infile, char *s) /对象和存放标识符指针 char ch; infilech; /读第一个字符 if(isalpha(ch)|ch=_) /用头文件“ctype.h” do / isalpta(ch)是字母为真,*s+=ch; infile.get(ch); /取下一个字符 while(isalnum(ch)|ch=_); /字母、数字或下划线循环 *s=0; /置串结束标记 infile.putback(ch); /返还最后一次多读的字符 ,例14-6:计算10以内的自然数的平方根,且保存到文件data.txt中 #include #include “fstream.h“ #include “stdlib.h“ #include “math.h“ void main() ofstream outfile; outfile.open(“data.txt“,ios:out); if (! outfile) cout“Cont open file “endl; exit(1);,for(int k=1;k11;k+) outfilektsqrt(k)endl; coutktsqrt(k)endl; outfile.close(); ,例14-7:将以上数据文件取出显示 方法1: #include #include “fstream.h“ #include “stdlib.h“ #include “math.h“ void main() int a;float b; ifstream infile;,infile.open(“data.txt“,ios:in); if (! infile) coutab; coutatbendl; infile.close(); ,方法2: #include #include “fstream.h“ #include “stdlib.h“ void main() int a;float b; int k=0; ifstream infile; infile.open(“data.txt“,ios:in); if (! infile) cout“Cont open file “endl; exit(1);,while(1) infileab; coutatbendl; k+; if(infile.eof() break; infile.close(); ,方法3: #include #include “fstream.h“ #include “stdlib.h“ void main() int a;float b; int k=0; ifstream infile; infile.open(“data.txt“,ios
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026届平顶山市重点中学九年级英语第一学期期末质量跟踪监视试题含解析
- 2026届辽宁省大连市高新园区化学九上期末监测模拟试题含解析
- 夜间文案工作总结与激励
- 王安石《南乡子自古帝王州》古诗鉴赏试题答案解析及译文
- 湖北省武汉东湖高新区2026届九年级英语第一学期期末达标测试试题含解析
- 银行安全保卫培训课件
- 预防接种沟通艺术
- 2026届江苏省南通市通州区金北学校九年级英语第一学期期末检测试题含解析
- 2026届陕西省汉中学市南郑区红庙镇初级中学九上化学期中复习检测模拟试题含解析
- 河北省石家庄市长安区第二十二中学2026届英语九上期末复习检测试题含解析
- 房子互换简单协议书
- 江苏连云港历年中考作文题与审题指导(2003-2024)
- 劳务分包加采购合同标准文本
- 气体充装安全培训课件
- 玻璃隔断制作安装合同
- 小学生防控近视课件
- 智能计算系统:从深度学习到大模型 第2版课件 第五章-编程框架原理
- 肛管直肠超声检查中国专家共识(2024版)解读
- 【MOOC】理解马克思-南京大学 中国大学慕课MOOC答案
- 帝豪EV450维修手册
- 高三家长会 携手共进-圆梦高考家长会 课件
评论
0/150
提交评论