http://math.ecnu.edu.cn/~jypan
内存不能为read 时间:2021-01-16 阅读:(
)
第十五讲文件流与输出输入重载http://math.
ecnu.
edu.
cn/~jypan2输入输出流文件流类与文件流对象文件流对象与文件关联文件读写:文本文件与二进制文件重载输出输入操作运算符>在C++中,所有的输入输出都通过"流"来描述.
输入流:数据流向程序(input)输出流:数据从程序中流出(output)具体实现方法:流类和流对象http://math.
ecnu.
edu.
cn/~jypan类名作用头文件ios抽象父类iostreamistreamostreamiostream通用输入流和其他输入流的父类通用输出流和其他输出流的父类通用输入输出流和其他输入输出流的父类iostreamC++I/O库中定义的流类3ifstreamofstreamfstream输入文件流类输出文件流类输入输出文件流类fstreamiosistreamostreamifstreamofstreamiostreamfstreamhttp://math.
ecnu.
edu.
cn/~jypan文件流头文件:fstream该头文件中定义了三个文件流类ofstream向文件写入数据ifstream从文件读取数据fstream既读又写文件流类4#includehttp://math.
ecnu.
edu.
cn/~jypan这里的类fstream也可以是ifstream或ofstream如果用ifstream,则对象所关联的文件只能读如果用ofstream,则对象所关联的文件只能写创建文件流对象5fstreamfstrm;//创建一个文件流对象,未绑定到任何文件fstreamfstrm(fname);//创建一个文件流,并绑定到文件fnamefstreamfstrm(fname,mode);//创建文件流的同时指定文件的打开模式http://math.
ecnu.
edu.
cn/~jypan文件流对象基本操作(成员函数)将文件流对象关联到其它文件时,须先关闭已绑定的文件文件流对象被释放时,close会被自动调用文件流成员函数6fstrm.
open(fname)//将文件流对象fstrm绑定到文件fnamefstrm.
close()//关闭与文件流对象fstrm绑定的文件fstrm.
is_open()//测试文件是否已顺利打开(且未关闭)http://math.
ecnu.
edu.
cn/~jypan输入输出方式是在ios类中定义的以上方式可以组合使用,用"|"隔开,如ios::out|ios::binaryios::app通常与ios::out组合使用文件打开模式7ios::in//只读ios::out//只写,若文件存在,则内容被清除ios::app//追加,即每次写操作均定位到文件末尾ios::ate//打开文件后立即定位到文件末尾ios::Trunc//若文件存在,则清除文件中原有的内容ios::binary//以二进制方式进行读写http://math.
ecnu.
edu.
cn/~jypan在缺省情形下,文件以文本方式打开ifstream对象只能设定in模式,缺省为inofstream对象只能设定out模式,缺省为outfstream对象可以设定in或/和out模式文件打开模式(续)8ifstreamifstrm;ofstreamofstrm;fstreamfstrm;ifstrm.
open("fname1");//以缺省方式打开ofstrm.
open("fname2",ios::out);fstrm.
open("fname3",ios::out|ios::app);Example建议使用fstream对象进行文件读写操作.
http://math.
ecnu.
edu.
cn/~jypan文本文件的写:>或getline文本文件操作9fstreamfstrm("fname.
txt",ios::out);fstrm>str1;//缺省以空格为输入结束符fstrm.
getline(str2,12);fstrm.
close();我们是如何使用cin和cout的,就可以同样来使用文件流对象http://math.
ecnu.
edu.
cn/~jypan对二进制文件使用>或getline是没有意义的.
此时需要使用父类ostream的成员函数write和父类istream的成员函数read.
write和read的函数原型10二进制文件操作字符指针buf指向内存中一段存储空间,n是读写的字节数.
write(constchar*buf,intn);read(char*buf,intn);http://math.
ecnu.
edu.
cn/~jypan11二进制文件操作(续)write函数将字符指针buf所指定的地址开始的50个字节的内容不加转换地写到输出文件流对象中.
read函数从输入文件流对象所关联的文件中,读入30个字节(或遇EOF结束),存放在字符指针buf所指的内存空间内.
输出文件流对象.
write(buf,50);输入文件流对象.
read(buf,30);http://math.
ecnu.
edu.
cn/~jypan例:二进制文件操作12constintn=5;intA[n]={1,2,3,4,5};fstreamfstrm("fout.
dat",ios::out|ios::binary);//文件流对象可以直接初始化fstrm.
write((char*)A,sizeof(A));//需要强制类型转换fstrm.
close();intB[n];fstrm.
open("fout.
dat",ios::in|ios::binary);fstrm.
read((char*)B,sizeof(B));fstrm.
close();ex15_fstream02.
cpphttp://math.
ecnu.
edu.
cn/~jypan13重载>IO标准库分别使用>执行输出和输入操作,为了使得它们也适用于新定义的类,即也能用>进行相应对象的输出和输入,需要对这两个运算符进行重载.
http://math.
ecnu.
edu.
cn/~jypan重载>14我们通过具体例子来说明classRational{public:Rational(){x=0;y=1;}Rational(intx,inty){this->x=x;this->y=y;}friendostream&operator>(istream&,Rational&);private:intx,y;};注:>不能作为成员函数重载!
只能作为非成员函数!
ex15_overload11.
cpphttp://math.
ecnu.
edu.
cn/~jypan几点说明15通常情况下,第一个形参是ostream对象的引用(非常量)(非常量:需要修改;引用:无法直接复制一个ostream对象)第二个形参是对象的常引用(需要输出的对象)为了能在单个表达式中多次使用,需按左值方式返回,即返回一个引用friendostream&operator>
一般大厂都是通过首年才有可以享受爆款活动,然后吸引我们注册他们商家达到持续续费和购买的目的。一般只有大厂才能有这样的魄力和能力首年亏本,但是对于一般的公司和个人厂家确实难过,这几年确实看到不少的同类商家难以生存。这里我们可以看到有对应的套餐方案。不过这两个套餐都是100%CPU独享的,不是有某云商家限制CPU的。但是轻量服务器有个不好的就是带宽是较大且流量是限制的额,分别是1GB和1.2TB月流量...
ucloud美国云服务器怎么样?ucloud是国内知名云计算品牌服务商家,目前推出全球多地机房的海外云服务器。UCloud主打的优势是海外多机房,目前正在进行的2021全球大促活动参与促销的云服务器机房就多达18个。UCloud新一代旗舰产品快杰云服务器已上线洛杉矶节点,覆盖北美和亚太地区,火热促销中, 首月低至7元,轻松体验具备优秀性能与极高性价比的快杰云服务器。点击进入:ucloud美国洛杉矶...
这两天在站长群里看到不少有使用DEDECMS织梦程序的朋友比较着急,因为前两天有看到来自DEDECMS,我们熟悉的织梦程序官方发布的公告,将会在10月25日开始全面商业用途的使用DEDECMS内容管理程序的会采用授权收费模式,如果我们有在个人或者企业商业用途的,需要联系且得到授权才可以使用,否则后面会通过维权的方式。对于这个事情,我们可能有些站长经历过,比如字体、图片的版权。以及有一些国内的CMS...
内存不能为read为你推荐
美国虚拟空间国内虚拟空间与美国虚拟主机有什么不一样电信主机租用电信云主机是什么业务?独立ip主机独立ip主机的好处?中文域名注册查询中文.com域名是什么,怎么注册com域名空间域名和空间是什么意思成都虚拟空间虚拟主机哪家最好~~~深圳网站空间求免费稳定空间网站?国外网站空间怎么样把网站空间放到国外去?1g虚拟主机打算买个1G的虚拟主机,用来做什么好?大连虚拟主机找个大连企业建站公司,大家给推荐一下吧。
短域名 电信服务器租用 香港vps 联通c套餐 分销主机 美元争夺战 debian源 web服务器架设软件 大容量存储 qingyun 工信部icp备案号 泉州移动 南通服务器 paypal注册教程 双12 cloudlink 云营销系统 阿里云免费邮箱 广东服务器托管 九零网络 更多