流数据从一个对象到另一个对象的流动.ppt_第1页
流数据从一个对象到另一个对象的流动.ppt_第2页
流数据从一个对象到另一个对象的流动.ppt_第3页
流数据从一个对象到另一个对象的流动.ppt_第4页
流数据从一个对象到另一个对象的流动.ppt_第5页
已阅读5页,还剩39页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第十讲 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 : istream cin; cout: ostream cout cerr: ostream cerr clog: ostream clog,文件流类,ofstream,ifstream,fstream 文件流类定义的操作应用于外部设备,最典型的设备是磁盘中的文件。 文件输出流 输出流成员函数 文件输入流 输入流成员函数,文件输出流,构造对象时指定文件名和模式 Ofstream:ofstream(char* pFileName, int mode=ios:out, int prot=filebuf:openprot) pFileName: 文件名 mode: 文件打开模式 prot: 文件共享方式,使用成员函数打开文件 void open( const char* szName, int nMode = ios:out, int nProt = 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中写入一些信息,如果文件不存在,则创建该文件*/ /构造对象时打开文件 ofstream fout(“e:tempmyfile.txt“); fout“this is“endl; /使用成员函数 ofstream fout; fout.open(“e:tempmyfile.txt“); fout“this is“endl;,/向文件myfile中追加一些信息: /构造对象时打开文件 ofstream fadd(“e:tempmyfile.txt“,ios:ate); fadd“a new file“endl; /调用成员函数 ofstream fout; fout.open(“e:tempmyfile.txt“,ios:ate); fout“ a new file “endl;,输出流成员函数,Put函数 输出一个字符 ostream/宽度和填充方式起作用,例: coutsetw(10); cout.put(a)endl; coutsetw(10); coutaendl; 输出结果: a _ _ _ _ _ _ _ _ _ a,write函数 内存中的一块内容写到输出文件流中 ostream,如果需要向文件流写整形或实型数据时,要先将他们转换成字符串: #include float f=123.4567; char fstr20; sprintf(fstr,”%f”,f);,seekp seekp:设置文件指针 ostream pos:长整形,指针的新位置 off:长整形,指针的偏移量 dir:相对位置: ios:beg 文件头 ios:cur 文件指针的当前位置 ios:end 文件尾,tellp:返回文件指针 streampos tellp(); ofstream fout(“e:tempmyfile.txt“); fout.seekp(10);/从文件头部向后移动10个字节 fout“10“; int pos; pos=fout.tellp(); pos=pos+2; fout.seekp(pos);/从当前位置向后移动2个字节 fout“12“;,close()函数 关闭文件,当在同一个流对象上打开了另外的文件,调用close()函数。 ofstream fout; fout.open(“file1”); fout.close(); fout.open(“file2”); fout.close();,错误处理函数 bad:出现不可恢复的错误,返回非0值 fail:出现不可恢复的错误或一个预期条件,返回非0值 good:没有错误,没有文件结束,返回非0值 eof:文件结束,返回非0值 clear:清除所有错误位 rdstate:返回当前错误状态 if(cout.fail() cerr“文件未打开”endl;,文件输入流,构造对象时打开文件 ifstream( const char* szName, int nMode = ios:in, int nProt = filebuf:openprot );,调用成员函数 void open( const char* szName, int nMode = ios:in, int nProt = filebuf:openprot ); 析构函数关闭由构造函数和成员函数打开的文件。当打开多个文件时可以使用close函数关闭文件。,输入流成员函数,get函数 输入一个字符 char a10; int i=0; ifstream fin(“e:tempmyfile.txt“); while(!fin.eof() ai=fin.get();/输入带空格 /或finai;自动过滤空格 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, int nLength ); char str10=“student“; char a5; istrstream ai(str,sizeof(a)-1); aia;,串流输出,ostrstream( char* pch, int nLength, int nMode = ios:out ); pch: 字符串数组 nLength: 数组大小,当字符个数超过nLength 时,字符串不再接受输出 nMode: 打开方式,/向字符数组中写入字符串 char str10; ostrstream aout(str,sizeof(str); aout“a student“endl;,控制符,输出宽度和填充字符 进制 格式标志值 精度,输出宽度和填充字符,setw(int wide) 设置域宽为wide setfill(char ch) 设置填充字符为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 对浮点数值显示小数点和尾部的0 Ios:uppercase 对十六进制数值显示大写字母AF,对于科学格式显示大写字母E。 Ios:showpos 对于正数显示正号 Ios:scientifil以科学格式显示浮点数值 Ios:fixed 以定点格式显示浮点数值,精度,浮点数输出有效位数的缺省值是6,可以用setprecition改变精度(小数点后位数)。 float a=234.5678923; coutsetiosflags(ios:fixed) setw(10) setprecision(5) aresetiosflags(ios:fixed) endl;,重载插入运算符,当向流输出类对象时,需要对插入运算符进行重载。,class base private: int m; int n; public: base(int i,int j):m(i),n(j)

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论