资源描述
第十章C+的输入输出,流文件文件流的使用:文件的输入和输出,10.1流与文件一、流,C+语言提供了流用于读写文件。接收输出数据的地方称为目标,发出输入数据的地方称为源。输入输出操作可以看作是字符序列在源、目标与对象之间的流动,因而将完成输入输出操作的类称为流类。源流目标流输入缓冲区(读)输出缓冲区(写)流的提取运算符流的插入运算符文本文件的写操作是向流中写一个字符流的插入运算符,例1:将文件file_from拷贝到文件file_to中去,#include#includeintCopyFile(char*file_from,char*file_to)/file_from:输入文件名(源文件);file_to:输出文件名(目标文件)charch;/文件不存在则打开失败ifstreamfrom(file_from,ios:in|ios:nocreate);/以文本方式打开if(!from)coutCannotopenfile_fromforinput!n;return0;/返回0表示复制文件不成功ofstreamto(file_to);/文件不存在则创建新文件if(!to)coutCannotopenfile_toforoutput!n;return0;/从流from中读一个字符到ch中,成功的话则写入to,否则文/件的每个字符都读完了while(from.get(ch)to.put(ch);from.close();to.close();/关闭文件return1;/返回1表示文件复制成功,例2:把一个整数、一个浮点数和一个字符串写到名为out.txt的文本文件中,#includeintmain()ofstreamoutfile;outfile.open(out.txt);if(!outfile)coutCannotopenout.txtforoutput!n;return0;/返回0表示打开文件不成功floatf=123.23;intn=10;outfilenfn;outfilefchstr;coutnfchn;cout运算符号跳过空白符号(如空格,回车),然后读入对应于输入对象类型的字符,例4:百钱买百鸡,#include#includevoidmain()inti,j,k;chara28;ofstreamofile(d:myfile.txt);/打开文件ofile公鸡母鸡小鸡endl;for(i=0;i,它不能读白字符if(ai=n)break;i+;/把文件中的第一行(到n)内容读入a字符数组ai=0;/a加上结束符,成为完整的字符串coutijk;/由文件读入if(ifile.eof()!=0)break;coutsetw(6)isetw(10)jsetw(10)kendl;/屏幕显示ifile.close();,myfile.txt,公鸡母鸡小鸡02575418788118112484,例5,#include/包含#include#includeclassinventory/产品目录charDescription20;charNo10;intQuantity;doubleCost;doubleRetail;/零售价public:inventory(char*=#,char*=0,int=0,double=0,double=0);voiddisplay();Bdatatofile(ofstream,inventory:inventory(char*des,char*no,intquan,doublecost,doubleret)strcpy(Description,des);strcpy(No,no);Quantity=quan;Cost=cost;Retail=ret;voidinventory:display()cout.setf(ios:left);coutsetw(20)Descriptionsetw(10)No;cout.unsetf(ios:left);/要改为右对齐,先清左对齐cout.setf(ios:right);coutsetw(10)Quantitysetw(10)Costsetw(10)Retailendl;,inventory:Bdatatofile(ofstream/由此可见读和写是完全对称的过程,次序决不能错,voidmain()inventorycar1(夏利2000,805637928,156,80000,105000),car2;inventorymotor1(金城125,93612575,302,10000,13000),motor2;ofstreamddatafile(d:Ex9_10.data,ios:out|ios:binary);car1.Bdatatofile(ddatafile);motor1.Bdatatofile(ddatafile);cout对象car1:endl;car1.display();cout对象motor1:endl;motor1.display();cout对象car2:endl;car2.display();cout对象motor2:endl;motor2.display();ddatafile.close();ifstreamsdatafile(d:Ex9_10.data,ios:in|ios:binary);/重新打开文件,从头读取数据car2.Bdatafromfile(sdatafile);/从文件读取数据拷贝到对象car2if(sdatafile.eof()=0)cout读文件成功endl;cout对象car2:endl;car2.display();motor2.Bdatafromfile(sdatafile);/继续从文件读取数据拷贝到对象motor2if(sdatafile.eof()=0)cout读文件成功endl;cout对象motor2:endl;motor2.display();sdatafile.close();,
展开阅读全文