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>
速云怎么样?速云,国人商家,提供广州移动、深圳移动、广州茂名联通、香港hkt等VDS和独立服务器。现在暑期限时特惠,力度大。广州移动/深圳移动/广东联通/香港HKT等9折优惠,最低月付9元;暑期特惠,带宽、流量翻倍,深港mplc免费试用!点击进入:速云官方网站地址速云优惠码:全场9折优惠码:summer速云优惠活动:活动期间,所有地区所有配置可享受9折优惠,深圳/广州地区流量计费VDS可选择流量翻...
中秋节快到了,spinservers针对中国用户准备了几款圣何塞机房特别独立服务器,大家知道这家服务器都是高配,这次推出的机器除了配置高以外,默认1Gbps不限制流量,解除了常规机器10TB/月的流量限制,价格每月179美元起,机器自动化上架,一般30分钟内,有基本自助管理功能,带IPMI,支持安装Windows或者Linux操作系统。配置一 $179/月CPU:Dual Intel Xeon E...
PQ.hosting怎么样?PQ.hosting是一家俄罗斯商家,正规公司,主要提供KVM VPS和独立服务器,VPS数据中心有香港HE、俄罗斯莫斯科DataPro、乌克兰VOLIA、拉脱维亚、荷兰Serverius、摩尔多瓦Alexhost、德国等。部分配置有变化,同时开通Paypal付款。香港、乌克兰、德国、斯洛伐克、捷克等为NVMe硬盘。香港为HE线路,三网绕美(不太建议香港)。免费支持wi...
内存不能为read为你推荐
虚拟空间租赁请帮忙理解:虚拟空间、租用主机、主机托管、自己架设服务器独立ip空间独立IP的空间有什么好处美国虚拟空间美国虚拟主机无限空间是什么意思?全能虚拟主机时代互联的全能云虚拟主机怎么样,稳不稳定,速度怎么样的?广东虚拟主机有什么便宜又好用的虚拟主机吗?免费国内空间中国有什么免费的空间域名主机什么是域名主机免备案虚拟空间免备案的虚拟主机空间,买了以后会强制备案不?北京网站空间什么样的网站空间好100m虚拟主机100M的虚拟主机都能做些什么
万网虚拟主机 香港vps主机 花生壳域名贝锐 互联网域名管理办法 服务器评测 technetcal bluevm 国外idc ibrs tna官网 微软服务器操作系统 重庆电信服务器托管 西安主机 阿里云邮箱登陆 xuni 睿云 广州主机托管 512内存 web服务器 卡巴斯基免费版 更多