8.1 IO类
iostream istream, wistream从流中读取数据
ostream, wostream
iostream, wiostream读写流
fstream ifstream, wifstream从文件中读取数据
ofstream, wofstream
fstream, wfstream读写文件
sstream istringstream, wistringstream从string中读取数据
ostringstream, wostringstream
stringstream, wstringstream读写string
为了支持宽字符wchar_t,所有的类型和函数只要以w开始就行。例如:wcin、wcout、wifstream。
8.1.1 IO对象无拷贝或赋值
ofstream out1, out2;
out1=out2;//错误,不能赋值和拷贝
由于不能赋值拷贝,所以不能将形参和返回值设置为流类型,通常必须使用引用方式传递和返回流。而且读写IO对象会改变对象状态,所以不能是const。
8.1.2 流的状态
可以通过流对象的rdstate成员函数返回一个iostate类型的值,表征流的当前状态。
-
- badbit,流崩溃
- failbit,IO操作失败
- eofbit,文件尾
- goodbit,没有错误
使用setstate函数可以将一个iostate的状态值设置为流的状态,对于已经有错误的流,使用good函数仍返回false。
使用无参的clear函数复位所有错误标识,执行clear()后,调用good返回true.
可能用到的函数:eof、fail、bad、good
8.1.3 管理输出缓冲
Endl可以完成换行,并刷新缓冲区。
cout << unitbuf; //所有输出操作都会立即刷新缓冲区
cout << nounitbuf; //将缓冲区刷新任务交给系统
将输入流关联到输出流
使用tie函数可以讲一个输出流,关联到输入流,并返回原来关联的输出流。
cin.tie(&cout);
不带参数的tie函数返回输入流关联的输出流。
8.2 文件输入输出
fstream
fstream fstrm(filePath);
fstream fstrm;
fstrm.open(filePath, mode);
fstrm.is_open();//检验是否成功打开是个好习惯
fstrm.close();
当一个fstream对象离开作用域时,与之关联的文件自动关闭。
Mode
只读:in
只写:out
每次写操作前定位到文件尾部:app
打开文件后定位到文件尾部:ate
截断文件:trunc
二进制方式进行IO:binary
注意:
-
- 每次调用open,都需要重新制定文件模式,否则为默认默认。
- out打开文件,文件从开头截断,为保留文件中的内容,应该同时指定为app
- 设定trunc,必须设定out:ofstream::out | ofstream::trunc
- 设定app,不能有trunc
8.3 string流
<sstream>头文件中
sstream strm;//未绑定的stringstream对象
sstream strm(s);//保存string s的一个拷贝
strm.str();//返回strm保存的string拷贝
strm.str(s);//将s拷贝到strm中,返回void
istringstream
将string类型通过istringstream当做流进行处理。
ostringstream
将其他流写入到ostringstream流中,可以相当于向string添加字符。