C++ primer读书笔记之 IO库
IO 库和头文件
iostream istream/wistream 从流读入数据
ostream/wostream 向流输出数据
iostream/wiostram 读写流
fstream ifstream/wifstream 从文件读入数据
ofstream/wofstream 向文件写入数据
fstream/wfstream 读写文件
sstream istringsteam/wistringstream 从string中读取数据
ostringstream/wostringstream 向string中写入数据
stringstream/wstringstream 读写string
- 标准库可以使得我们忽略不同类型之间的流的差异,这是通过继承机制实现的。这个意思是ifstream和istringstream都是继承自istream,我们可以像使用istream一样来使用ifstream和stringstream。
rdstate 是流对象的成员,返回一个iostate状态值。
- 由于设备的写操作可能很耗时,允许操作系统将多个输出操作组合成单一的设备写操作可以带来很大性能的提升。
- 在每个输出操作以后,我们可以用unitbuf设置流的内部状态,来清空缓冲区。默认情况下,cerr是设置unitbuf的,因此写到cerr的内容都是立即刷新的。
cout<<"hi"<<endl;//输出hi和换行,然后刷新缓冲区
cout<<"hi"<<flush;//输出hi,然后刷新缓冲区
cout<<"hi"<<ends;//输出hi和空格,然后刷新缓冲区
如果程序崩溃,输出缓冲区不会被刷新
交互式系统通常应该关联输入流和输出流,这意味着所有的输出,包括用户提示信息都会在读操作之前被打印出来。
- tie有两个重载版本,主要是用于关联流。
fstream特有的操作
fstream fstrm; //创建一个未绑定的文件流,fstream是头文件fstream中定义的一个类型
fstream fstrm(s);//创建一个fstrm并打开名为s的文件,s可以使string类型或者c风格字符串的类型。
fstream fstrm(s,mode);//与前一个构造函数类似,但是以指定mode打开文件
fstrm.open(s);// 打开名为s的文件并与fstrm绑定
fstrm.close();// 关闭与fstrm绑定的文件,返回void
fstrm.is_open();//返回一个bool值,指出fstrm关联的文件是否成功打开且尚未关闭。
如果我们定义了一个空文件流对象,可以随后调用open来将它与文件关联起来。
- 当一个fstream对象被销毁时,close会自动被调用。
文件模式:
in 以读方式打开
out 以写方式打开
app 每次进行写操作时都定位在文件的末尾
ate 打开文件后立即定位到文件的末尾
trunc 截断文件
binary 以二进制方式进行IO
保留被ofstream打开的文件中已有数据的唯一方法是显式指定app或in模式
每次打开文件时,都要设置文件模式,可能是显式的设置,也可能是隐式的设置。当程序未指定模式时,就使用默认值。
stringstream 特有的操作
sstream strm; strm是一个为绑定的stringstream对象。sstream是头文件sstream中定义的类型
sstream strm(s) strm是一个sstream对象,保存string s的一个拷贝。
strm.str() 返回strm所保存的string的拷贝
strm.str(s) 将string s 拷贝到strm中,返回void