流数据从一个对象到另一个对象的流动.ppt

上传人:zhu****ei 文档编号:3409798 上传时间:2019-12-13 格式:PPT 页数:44 大小:378.31KB
返回 下载 相关 举报
流数据从一个对象到另一个对象的流动.ppt_第1页
第1页 / 共44页
流数据从一个对象到另一个对象的流动.ppt_第2页
第2页 / 共44页
流数据从一个对象到另一个对象的流动.ppt_第3页
第3页 / 共44页
点击查看更多>>
资源描述
第十讲I/O流,流:数据从一个对象到另一个对象的流动流是一种抽象,负责在数据的生产者和数据的消费者之间建立联系,并管理数据的流动。,ios,抽象流基类,istream,通用输入流类和其他输入流的基类,ifstream,输入文件流类,istream_withassign,cin的输入流类,istrstream,输入字符串流类,ostream,通用输出流类和其他输出流的基类,ofstream,输出文件流,ostream_withassign,cout,cerr,clog的输入流类,ostrstream,输出字符串流类,iostream,通用输入输出流类和其他输入输出流的基类,fstream,输入输出文件流类,strstream,输入输出字符串流类,stdiostream,标准I/O文件的输入输出类,I/O流类库各个类之间的关系,ios,istream,ostream,istrstream,istream_withassign,ifstream,ostrstream,ostream_withassign,ofstream,iostream,fstream,strstream,stdiostream,public,public,public,public,public,public,public,public,public,public,public,ios,istream,ifstream,istream_withassign,istrstream,ostream,ofstream,ostream_withassign,ostrstream,iostream,fstream,strstream,stdiostream,iostream.h,iostream.h,fstream.h,iostream.h,strstrea.h,iostream.h,fstream.h,iostream.h,strstrea.h,iostream.h,fstream.h,strstrea.h,stdiostr.h,I/O流类所在包含文件,I/O流操作,标准流类文件流类串流类控制符重载插入运算符,标准流类,标准头文件:iostream.h对应标准设备表:cin:键盘cout:屏幕cerr:屏幕/错误信息不再重定向,没有缓冲clog:打印机/类似cerr,有缓冲,缓冲区满输出,标准流对象的定义:cin:istreamcin;cout:ostreamcoutcerr:ostreamcerrclog:ostreamclog,文件流类,ofstream,ifstream,fstream文件流类定义的操作应用于外部设备,最典型的设备是磁盘中的文件。文件输出流输出流成员函数文件输入流输入流成员函数,文件输出流,构造对象时指定文件名和模式Ofstream:ofstream(char*pFileName,intmode=ios:out,intprot=filebuf:openprot)pFileName:文件名mode:文件打开模式prot:文件共享方式,使用成员函数打开文件voidopen(constchar*szName,intnMode=ios:out,intnProt=filebuf:openprot);在对象消失时,由析构函数关闭由构造函数或open成员函数打开的文件。,文件打开选项,ios:ate,如果文件存在,输出内容加在末尾,ios:in,具有输入能力,ios:out,具有输出能力,ios:trunc,如果文件存在,清除文件内容,ios:nocreate,如果文件不存在,返回错误,Ios:ate,如果文件存在,输出内容加在末尾,ios:noreplace,如果文件存在,返回错误,ios:binary,以二进制方式打开文件(不转换字符),可以用|组合打开方式,文件保护方式选项,Filebuf:openprot,兼容共享方式,Filebuf:sh_none,独占,不共享,Filebuf:sh_read,允许读共享,Filebuf:sh_write,允许写共享,例:/*向文件myfile中写入一些信息,如果文件不存在,则创建该文件*/构造对象时打开文件ofstreamfout(e:tempmyfile.txt);foutthisisendl;/使用成员函数ofstreamfout;fout.open(e:tempmyfile.txt);foutthisisendl;,/向文件myfile中追加一些信息:/构造对象时打开文件ofstreamfadd(e:tempmyfile.txt,ios:ate);faddanewfileendl;/调用成员函数ofstreamfout;fout.open(e:tempmyfile.txt,ios:ate);foutanewfileendl;,输出流成员函数,Put函数输出一个字符ostream/宽度和填充方式起作用,例:coutsetw(10);cout.put(a)endl;coutsetw(10);coutaendl;输出结果:a_a,write函数内存中的一块内容写到输出文件流中ostream,如果需要向文件流写整形或实型数据时,要先将他们转换成字符串:#includefloatf=123.4567;charfstr20;sprintf(fstr,”%f”,f);,seekpseekp:设置文件指针ostreampos:长整形,指针的新位置off:长整形,指针的偏移量dir:相对位置:ios:beg文件头ios:cur文件指针的当前位置ios:end文件尾,tellp:返回文件指针streampostellp();ofstreamfout(e:tempmyfile.txt);fout.seekp(10);/从文件头部向后移动10个字节fout10;intpos;pos=fout.tellp();pos=pos+2;fout.seekp(pos);/从当前位置向后移动2个字节fout12;,close()函数关闭文件,当在同一个流对象上打开了另外的文件,调用close()函数。ofstreamfout;fout.open(“file1”);fout.close();fout.open(“file2”);fout.close();,错误处理函数bad:出现不可恢复的错误,返回非0值fail:出现不可恢复的错误或一个预期条件,返回非0值good:没有错误,没有文件结束,返回非0值eof:文件结束,返回非0值clear:清除所有错误位rdstate:返回当前错误状态if(cout.fail()cerr“文件未打开”ai;自动过滤空格i+;,getline函数istream从流中向存储器pch读入多个字符,直到遇到以下情况之一:所读字符个数将达到nCount;将遇到终止字符;文件结束。,read函数istream,seekg函数返回下一个将读位置的指针tellg函数设置下一个将读位置的指针/从流中间隔读入字符while(!fin.eof()pos=fin.tellg();pos+;fin.seekg(pos);fin.get(di);i+;,串流类,ostrstream,istrstream,strstream串流类允许将fstream类定义的文件操作应用于存储区中的字符串。串流类将字符串看作为设备。串流输入串流输出,串流输入,istrstream(char*pch,intnLength);charstr10=student;chara5;istrstreamai(str,sizeof(a)-1);aia;,串流输出,ostrstream(char*pch,intnLength,intnMode=ios:out);pch:字符串数组nLength:数组大小,当字符个数超过nLength时,字符串不再接受输出nMode:打开方式,/向字符数组中写入字符串charstr10;ostrstreamaout(str,sizeof(str);aoutastudentendl;,控制符,输出宽度和填充字符进制格式标志值精度,输出宽度和填充字符,setw(intwide)设置域宽为widesetfill(charch)设置填充字符为ch,进制,dec:十进制oct:八进制hex:十六进制,格式标志值,使用带参数的setiosflags操纵符可以设置格式,它的影响是持久的,直到用resetiosflags恢复缺省值。,Ios:skipws在输入中跳过空白Ios:left左对齐Ios:right右对齐Ios:internal在指定任何引导标记或基之后增加填充字符Ios:dec以十进制格式化数值Ios:oct以八进制格式化数值Ios:hex以十六进制格式化数值Ios:showbase以C+编译器能读的格式显示数值常量,Ios:showpoint对浮点数值显示小数点和尾部的0Ios:uppercase对十六进制数值显示大写字母AF,对于科学格式显示大写字母E。Ios:showpos对于正数显示正号Ios:scientifil以科学格式显示浮点数值Ios:fixed以定点格式显示浮点数值,精度,浮点数输出有效位数的缺省值是6,可以用setprecition改变精度(小数点后位数)。floata=234.5678923;coutsetiosflags(ios:fixed)setw(10)setprecision(5)aresetiosflags(ios:fixed)endl;,重载插入运算符,当向流输出类对象时,需要对插入运算符进行重载。,classbaseprivate:intm;intn;public:base(inti,intj):m(i),n(j)virtualvoidview(ostream,ostream,如果该类有一个派生类:classder:publicbasepublic:der(inti,intj):base(i,j)voidview(ostream,执行:baseb1(10,20);derd1(100,200);ofstreamfout(e:tempmyfile.txt);foutb1d1endl;会向文件中写入:m=10n=20inderm=100n=200,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!