第八章 IO库学习笔记(第一遍阅读)

第八章 IO库学习笔记(第一遍阅读)

C++语言不直接处理输入输出,使用标准库来处理面向流的输入和输出。
- iostream处理控制台IO
- fstream处理命名文件I
- stringstream完成内存string的IO
类fstream和stringstream继承自类iostream,输入类继承自istream,输出类继承自ostream。
每个IO对象都维护一组条件状态,用来指出对象是否可以进行IO操作。标准库提供了一组函数,用来设置和检测这些状态。
术语:条件状态 文件模式 文件流 字符串流

IO类

三个头文件:
1. iostream
istream wistream 从流中读取数据
ostream wostream 向流中写入数据
iostream wiostream 读写流
2. fstream
3. stringstream
注意,标准库中也定义了一组类型和对象来草种wchar_t(宽字符)类型的数据。

IO对象无拷贝或赋值

不能拷贝或对IO对象赋值,进行IO操作的函数通常是以引用方式传递和返回流,读写IO对象会改变它的状态所以传递和返回的引用不能是const的。

条件状态

一个流一旦发生错误,其上后续的IO操作都会失败,在代码通常应该在使用一个流之前检查它是否处于良好的状态。

while (cin>>word)
//ok 读操作成功

IO类中定义了一些函数和标识,可以帮助我们查询和管理流的条件状态。

strm::iostate //提供了表达流状态的完整功能,应作为一个为集合来使用,与位运算符一起使用可以一次性检测多个标志位
strm::badbit  //流已经崩溃 (系统级错误)
strm::failbit //流操作失败
strm::eofbit  //流达到了文件结束
strm::goodbit //刘伟处于错误状态
s.eof()//若流的eofbit置位则返回true
s.fail()
s.good()
s.clear()//将流的所有条件状态位复位,将流的状态设置为有效。
s.clear(flags)
s.setstate(flags)
s.rdstate()
cin.clear(cin.rdstate()&~cin.failbit&~cin.batbit);
//复位failbit和badbit位 其他位保持不变
管理输出缓冲

每个输出流都管理一个缓冲区,用来保存程序读写的数据。
刷新输出缓冲区:
endl 换行 刷新
flush 刷新
ends 空字符 刷新
unitbuf 每次写操作后都进行一次flush
nounitbut 回到正常缓冲方式
*如果程序崩溃,输出缓冲区不会被刷新

文件输入输出

头文件:fstream
三个类型:ifstream ofstream fstream
除继承自iostream类型的行为fstream增加了新的成员管理与流关联的文件

fstream fstrm;
fstream fstrm(s);
fstream fstrm(s,mode);
fstrm.open(s);
fstrm.close();
fstrm.is_open();
文件模式
in        %读方式打开
out       %写方式打开
app       %每次写都定位到文件末尾
ate       %打开文件后立即定位到文件末尾
trunc     %截断文件
binary    %以二进制方式进行IO

ate 和binary模式可用于任何类型的文件流对象,可以与其他类型模式组合使用。

String流

头文件:sstream
三个类型:istringstream ostringstream stringstream

sstream strm;
sstream strm(s); % strm是一个sstream的对象,保存strings s的一个拷贝
strm.str();      % 返回strm所保存的string考办
strm.str(s);     % 将string s拷贝到strm中
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值