IO库
** IO库设施: **
istream
类型:提供输入操作ostream
类型:提供输出操作cin
:一个istream对象,从标准输入读取数据cout
:一个ostream对象,从标准输出写入数据cerr
:一个ostream对象,通常用于输出程序错误信息,写入到标准错误>>
运算符:用来从一个istream对象读取输入数据<<
运算符:用来向一个ostream对象写入数据getline
函数:从一个给定的istream读取一行数据,存入一个给定的string对象中
IO类
头文件 | IO库类型 |
---|---|
iostream | istream,wistream从流读取数据 ostream,wostream向流写入数据 iostream,wiostream读写流 |
fstream | ifstream,wistream从文件读取数据 ofstream,wofstream向文件写入数据 fstream,wfstream读写文件 |
sstream | istringstream,wistringstream从string读取数据 ostringstream,wostringstream向string写入数据 stringstream,wstringstream读写string |
- IO对象没有拷贝或赋值
- 定义函数时不能将形参设置为流类型
- 进行IO操作的函数通常使用引用方式传递和返回流
因为读写一个IO对象会改变其状态,因此传递和返回的引用不能是const类型的
一个流一旦发生错误,其后续的IO操作都会失败
1 |
|
输出缓冲管理
cout<<"shansan"
文本串可能立即打印出来,但也有可能被操作系统保存在操作系统的缓冲区中,随后再打印。
缓冲机制的存在可以让操作系统将程序的多个输出操作组合成单一的系统级写操作
由于设备写操作可能很耗时间,允许操作系统将多个输出操作组合为单一的设备写操作可以带来很大的便利
** 使用操纵符刷新缓冲区 **
- endl:完成换行机制并且刷新缓冲区
- ends:仅刷新缓冲区
- flush:仅刷新缓冲区
程序崩溃,输出缓冲区不会刷新
文件IO
https://shansan.top/2018/10/22/%E5%9D%91%E4%BA%BA%E7%9A%84C++-2/#%E5%86%99%E5%85%A5%E6%96%87%E4%BB%B6-amp-amp-%E8%AF%BB%E5%8F%96%E6%96%87%E4%BB%B6
头文件定义了三个文件类型来支持文件IO
- ifstream:从文件读取数据
- ofstream:向文件写入数据
- fstream:读和写操作都能进行
每一个文件流对象都定义了一个名为open的成员函数,它完成了一些系统相关的操作,来定位给定的文件,并视情况打开为读或写模式
一旦一个文件流已经打开,它就保持与对应文件的关联。对一个已经打开的文件流调用open会失败,并会导致failbit被置位,随后试图使用文件流的操作都会失败
** ifstream、ofstream、fstream对象上的操作,以下操作都适用
操作 | 说明 |
---|---|
fstream file | 创建一个未绑定的文件流 |
fstream file(file_name) | 创建一个fstream对象,并打开名字为file_name的文件。file_name可以是一个指向C风格的字符串,也可以是一个string类型 |
fstream file(file_name,mode) | mode为指定的打开模式 |
fstream.close() | 关闭与fstream绑定的文件 |
fstream.is_open() | 返回一个bool值,指出与fstream关联的文件是否成功被打开且尚未被关闭 |
1 |
|
文件模式
每一个流都有一个关联的文件模式,用来指出如何使用文件。
每一个文件流都定义了一个默认的文件模式
- 与ifstream关联的文件默认以in模式打开
- 与ofstream关联的文件默认以out模式打开
- 与fstream关联的文件默认以in和out模式打开
文件模式 | 说明 |
---|---|
in | 以读方式打开文件 |
out | 以写方式打开文件 |
app | 每次写操作前均定位到文件末尾 |
ate | 打开文件后立即定位到文件末尾 |
trunc | 截断文件 |
binary | 以二进制方式进行IO |