标准IO库

IO类型在三个独立的头文件中定义:iostream定义读写控制窗口的类型,fstream定义读写已命名文件的类型,而sstream所定义的类型则用于读写存储在内存中的string对象。在fstream和sstream里定义的每种类型都是从iostream头文件中定义的相关类型派生而来。

 

1.IO对象不可复制和赋值

ofstream out1,out2;
out1 = out2;//错误,IO对象不可以赋值
ofstream print(ofstream);//错误,IO对象不可以复制
return 0;

 注意:只支持复制的元素类型可以存储在vector或其他容器类型里。由于流对象不能复制,因此不能存储在vector(或其他)容器中。

形参和返回类型也不能为流类型。如果需要传递或返回IO对象,则必须传递或返回指向该对象的指针或引用。

 

2.输出缓冲区的管理

endl:用于输出一个换行符,用于输出一个换行符并刷新缓冲区。

flush:用于刷新流,但不在输出中添加任何字符。

注意:如果需要刷新所有输出,最好使用unitbuf操作符。这个操作符在每次执行完写操作后都刷新流:

cout<<unitbuf<<"first"<<"second"<<nounitbuf;

等价于:

cout<<"first"<<flush<<"second"<<flush;

nounitbuf操作符流将流恢复为使用正常的、由系统管理的缓冲区刷新方式。

 

3.文件的输入和输出

fstream头文件定义了三种支持文件IO的类型:

(1)ifstream,由istream派生而来,提供读文件的功能。

(2)ofstream,由ostream派生而来,提供写文件的功能。

(3)fstream,由iostream派生而来,提供读写同一个文件的功能。

 

4.文件流对象的使用

string ifile = "aaaa";//读文件名的string对象
string ofile = "bbbb";//写文件名的string对象
//c_str()函数返回一个指向正规C字符串的指针
ifstream infile(ifile.c_str());		//infile是读的流
ofstream outfile(ofile.c_str());	//outfile是写的流

 注意:由于历史的原因,IO标准库使用的是C风格字符串而不是C++string类型的字符串作为文件名。

(1)检查文件打开是否成功

打开文件后,通常检验打开是否成功,这是一个好习惯:

if(!infile)
{
	cerr<<"Error:unable to open input file:"
		<<ifile<<endl;
	return -1;
}

 (2)将文件流与新文件重新绑定

fsteam对象一旦打开,就保持与指定的文件相关联。如果要把fstream对象与另一个不同的文件关联,则必须先关闭(close)现在的文件,然后打开(open)另一个文件。

(3)文件模式

在打开文件时 ,无论是调用Open还是以文件名作为流初始化的一部分,都需要指定文件模式。

文件模式:

in:打开文件做读操作

out:打开文件做写操作

app:在每次写之前找到文件尾

ate:打开文件后立即将文件定位在文件尾

trunc:打开文件时清空已存在的文件流

binary:以二进制模式进行IO操作

 

(4)打开模式的有效组合

out                                       打开文件做写操作,删除文件中已有的数据

out | app                              打开文件做写操作,在文件尾写入

out | trunc                            与out模式相同

in                                         打开文件做读操作

in | out                                  打开文件做读、写操作,并定位与文件开头处

in | out | trunc                       打开文件做读、写操作,删除文件中已有的数据

   

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值