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

上传人:鲁** 文档编号:568239229 上传时间:2024-07-23 格式:PPT 页数:44 大小:378.31KB
返回 下载 相关 举报
流数据从一个对象到另一个对象的流动.ppt_第1页
第1页 / 共44页
流数据从一个对象到另一个对象的流动.ppt_第2页
第2页 / 共44页
流数据从一个对象到另一个对象的流动.ppt_第3页
第3页 / 共44页
流数据从一个对象到另一个对象的流动.ppt_第4页
第4页 / 共44页
流数据从一个对象到另一个对象的流动.ppt_第5页
第5页 / 共44页
点击查看更多>>
资源描述

《流数据从一个对象到另一个对象的流动.ppt》由会员分享,可在线阅读,更多相关《流数据从一个对象到另一个对象的流动.ppt(44页珍藏版)》请在金锄头文库上搜索。

1、第十讲 I/O流流流:数据从一个对象到另一个对象的流动流是一种抽象,负责在数据的生产者和数据的消费者之间建立联系,并管理数据的流动。iosios抽象流基类抽象流基类抽象流基类抽象流基类istreamistream通用输入流类和其他输入流的基类通用输入流类和其他输入流的基类通用输入流类和其他输入流的基类通用输入流类和其他输入流的基类ifstreamifstream输入文件流类输入文件流类输入文件流类输入文件流类istreamistream_ _withassignwithassigncincin的输入流类的输入流类的输入流类的输入流类istrstreamistrstream输入字符串流类输入字符

2、串流类输入字符串流类输入字符串流类ostreamostream通用输出流类和其他输出流的基类通用输出流类和其他输出流的基类通用输出流类和其他输出流的基类通用输出流类和其他输出流的基类ofstreamofstream输出文件流输出文件流输出文件流输出文件流ostreamostream_ _withassignwithassigncoutcout, ,cerrcerr,clog,clog的输入流类的输入流类的输入流类的输入流类ostrstreamostrstream输出字符串流类输出字符串流类输出字符串流类输出字符串流类iostreamiostream通用输入输出流类和其他输入输出流的基类通用输入

3、输出流类和其他输入输出流的基类通用输入输出流类和其他输入输出流的基类通用输入输出流类和其他输入输出流的基类fstreamfstream输入输出文件流类输入输出文件流类输入输出文件流类输入输出文件流类strstreamstrstream输入输出字符串流类输入输出字符串流类输入输出字符串流类输入输出字符串流类stdiostreamstdiostream标准标准标准标准I/OI/O文件的输入输出类文件的输入输出类文件的输入输出类文件的输入输出类I/O流类库各个类之间的关系iosiosistreamistreamostreamostreamistrstreamistrstreamistreamistr

4、eam_ _withassignwithassignifstreamifstreamostrstreamostrstreamostreamostream_ _withassignwithassignofstreamofstreamiostreamiostreamfstreamfstreamstrstreamstrstreamstdiostreamstdiostreampublicpublicpublicpublicpublicpublicpublicpublicpublicpublicpubliciosiosistreamistreamifstreamifstreamistreamistrea

5、m_ _withassignwithassignistrstreamistrstreamostreamostreamofstreamofstreamostreamostream_ _withassignwithassignostrstreamostrstreamiostreamiostreamfstreamfstreamstrstreamstrstreamstdiostreamstdiostreamiostreamiostream.h.hiostreamiostream.h.hfstreamfstream.h.hiostreamiostream.h.hstrstreastrstrea.h.hi

6、ostreamiostream.h.hfstreamfstream.h.hiostreamiostream.h.hstrstreastrstrea.h.hiostreamiostream.h.hfstreamfstream.h.hstrstreastrstrea.h.hstdiostrstdiostr.h.hI/OI/O流类所在包含文件流类所在包含文件流类所在包含文件流类所在包含文件I/O流操作标准流类标准流类文件流类文件流类串流类串流类控制符控制符重载插入运算符重载插入运算符标准流类标准头文件:iostream.h对应标准设备表:cin:键盘cout:屏幕cerr:屏幕/错误信息不再重定向,

7、没有缓错误信息不再重定向,没有缓冲冲clog:打印机/类似类似cerr,有缓冲,缓冲区有缓冲,缓冲区满输出满输出标准流对象的定义标准流对象的定义:cin :istream cin;cout:ostream coutcerr:ostream cerrclog:ostream clog文件流类ofstream,ifstream,fstream文件流类定义的操作应用于外部设备,最典型的设备是磁盘中的文件。文件输出流文件输出流输出流成员函数输出流成员函数文件输入流文件输入流输入流成员函数输入流成员函数文件输出流构造对象时指定文件名和模式Ofstream:ofstream(char* pFileName

8、,int mode=ios:out,int prot=filebuf:openprot)pFileName:文件名mode:文件打开模式prot:文件共享方式使用成员函数打开文件voidvoid open(open( constconst charchar* szName, , intint nMode = = iosios:out,:out, intint nProt = = filebuffilebuf:openprotopenprot ););在对象消失时,由析构函数关闭析构函数关闭析构函数关闭析构函数关闭由构造函数或open成员函数打开的文件。文件打开选项文件打开选项iosios:at

9、e:ate如果文件存在,输出内容加在末尾如果文件存在,输出内容加在末尾如果文件存在,输出内容加在末尾如果文件存在,输出内容加在末尾iosios:in:in具有输入能力具有输入能力具有输入能力具有输入能力iosios:out:out具有输出能力具有输出能力具有输出能力具有输出能力iosios: :trunctrunc如果文件存在,清除文件内容如果文件存在,清除文件内容如果文件存在,清除文件内容如果文件存在,清除文件内容iosios: :nocreatenocreate如果文件不存在,返回错误如果文件不存在,返回错误如果文件不存在,返回错误如果文件不存在,返回错误Ios:ate如果文件存在,输出内

10、容加在末尾iosios: :noreplacenoreplace如果文件存在,返回错误如果文件存在,返回错误如果文件存在,返回错误如果文件存在,返回错误iosios:binary:binary以二进制方式打开文件以二进制方式打开文件以二进制方式打开文件以二进制方式打开文件( (不转换字符不转换字符不转换字符不转换字符) )可以用可以用可以用可以用|组合打开方式组合打开方式组合打开方式组合打开方式文件保护方式选项FilebufFilebuf: :openprotopenprot兼容共享方式兼容共享方式兼容共享方式兼容共享方式FilebufFilebuf: :shsh_none_none独占,不共

11、享独占,不共享独占,不共享独占,不共享FilebufFilebuf: :shsh_read_read允许读共享允许读共享允许读共享允许读共享FilebufFilebuf: :shsh_write_write允许写共享允许写共享允许写共享允许写共享例:/*/*/*/*向文件向文件向文件向文件myfilemyfilemyfilemyfile中写入一些信息,如果文件不存中写入一些信息,如果文件不存中写入一些信息,如果文件不存中写入一些信息,如果文件不存在,则创建该文件在,则创建该文件在,则创建该文件在,则创建该文件*/*/*/*/构造对象时打开文件构造对象时打开文件构造对象时打开文件构造对象时打开文

12、件ofstream fout(e:tempmyfile.txt);foutthis isendl;/使用成员函数使用成员函数ofstream fout;fout.open(e:tempmyfile.txt);foutthis isendl;/向文件向文件向文件向文件myfilemyfilemyfilemyfile中追加一些信息:中追加一些信息:中追加一些信息:中追加一些信息:/构造对象时打开文件构造对象时打开文件构造对象时打开文件构造对象时打开文件ofstream fadd(e:tempmyfile.txt,ios:ate);fadda new fileendl;/调用成员函数调用成员函数of

13、stream fout;fout.open(e:tempmyfile.txt,ios:ate);fout a new file endl;输出流成员函数Put函数函数 输出一个字符输出一个字符输出一个字符输出一个字符ostreamostream& & put(put( charchar ch ););ofstream fout(e:tempmyfile.txt,ios:ate);fout.put(A)endl;/宽度和填充方式不起作用宽度和填充方式不起作用宽度和填充方式不起作用宽度和填充方式不起作用foutAendl;/宽度和填充方式起作用宽度和填充方式起作用宽度和填充方式起作用宽度和填充方式

14、起作用例:coutsetw(10);cout.put(a)endl;coutsetw(10);coutaendl;输出结果:a_ _ _ _ _ _ _ _ _ awrite函数 内存中的一块内容写到输出文件流中ostreamostream& & write(write( constconst charchar* pch, , intint nCount ););pch:内存数据起始地址nCount:字节数ofstream fout(e:tempmyfile.txt,ios:ate);char a=write;fout.write(a,sizeof(a);如果需要向文件流写整形或实型数据时,要

15、先将他们转换成字符串:#include float f=123.4567;char fstr20;sprintf(fstr,”%f”,f);seekpseekp:设置文件指针ostreamostream& & seekpseekp( ( streamposstreampos pos ););ostreamostream& & seekpseekp( ( streamoffstreamoff off, , iosios:seek_dir:seek_dir dir ););pos:长整形,指针的新位置off:长整形,指针的偏移量dir:相对位置:iosios:beg:beg文件头iosios:cu

16、r:cur文件指针的当前位置iosios:end:end文件尾tellp:返回文件指针streamposstreampos tellptellp();();ofstream fout(e:tempmyfile.txt);fout.seekp(10);/从文件头部向后移动从文件头部向后移动1010个字节个字节fout10;int pos;pos=fout.tellp();pos=pos+2;fout.seekp(pos);/从当前位置向后移动从当前位置向后移动2 2个字节个字节fout12;close()函数关闭文件,当在同一个流对象上打开了另外的文件,调用close()函数。ofstream

17、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“文件未打开”ai;finai;自动过滤空格自动过滤空格自动过滤空格自动过滤空格i+;getline函数istreamistream& & getline getline( char*( ch

18、ar* pch, , int int nCount, , char char delim = n );= n );从流中向存储器pch读入多个字符,直到遇到以下情况之一:所读字符个数将达到nCount;将遇到终止字符;文件结束。read 函数istreamistream& read( char*& read( char* pch, , int int nCount ););/从文件读nCount个字节到指定的存储区char d100;ifstream fin(e:tempmyfile.txt);fin.read(d,20);seekg函数返回下一个将读位置的指针tellg函数设置下一个将读位置

19、的指针/ /从流中间隔读入字符从流中间隔读入字符从流中间隔读入字符从流中间隔读入字符while(!fin.eof()pos=fin.tellg();pos+;fin.seekg(pos);fin.get(di);i+;串流类ostrstream,istrstream,strstream串流类允许将fstream类定义的文件操作应用于存储区中的字符串。串流类将字符串看作为设备。串流输入串流输入串流输出串流输出串流输入istrstreamistrstream( char*( char* pch, , int int nLength ););char str10=student;char a5;is

20、trstream ai(str,sizeof(a)-1);aia;串流输出ostrstreamostrstream( char*( char* pch, , int int nLength, ,int int nMode = = ios ios:out );:out );pch:字符串数组nLength:数组大小,当字符个数超过nLength时,字符串不再接受输出nMode: 打开方式 /向字符数组中写入字符串向字符数组中写入字符串char str10;ostrstream aout(str,sizeof(str);aouta studentendl;控制符输出宽度和填充字符输出宽度和填充字符

21、进制进制格式标志值格式标志值精度精度输出宽度和填充字符setw(int wide)设置域宽为widesetfill(char ch)设置填充字符为ch进制dec:十进制oct:八进制hex:十六进制格式标志值使用带参数的setiosflags操纵符可以设置格式,它的影响是持久的,直到用resetiosflags恢复缺省值。Ios:skipws 在输入中跳过空白Ios:left 左对齐Ios:right右对齐Ios:internal 在指定任何引导标记或基之后增加填充字符Ios:dec 以十进制格式化数值Ios:oct 以八进制格式化数值Ios:hex 以十六进制格式化数值Ios:showbas

22、e 以C+编译器能读的格式显示数值常量Ios:showpoint 对浮点数值显示小数点和尾部的0Ios: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)en

23、dl;重载插入运算符当向流输出类对象时,需要对插入运算符进行重载。class baseprivate:int m;int n;public:base(int i,int j):m(i),n(j)virtual void view(ostream& out)outm=mendl;outn=nendl;ostream& operator(ostream& out,base& b)b.view(out);return out;main()base b(10,20);ofstream fout(e:tempmyfile.txt);foutbendl;如果该类有一个派生类:class der:public basepublic:der(int i,int j):base(i,j)void view(ostream& out)outin derendl;base:view(out);执行:base b1(10,20);der d1(100,200);ofstream fout(e:tempmyfile.txt);foutb1d1endl;会向文件中写入:m=10n=20in derm=100n=200

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 研究生课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号