charpter8 IO库
IO类
- 基本io类:istream,ostream,cin(iosteam的一个对象),cout(ostream的一个对象)
基本io类2:iostream定义了用于读写流的基本类型,fstream定义了读写命名文件的类型,sstream定义了读写内存string对象的类型。
iosream: 从流中读写
fstream:从文件中读写
sstream:从string中读写刷新输出缓冲区:endl->输出换行并刷新缓冲区 // flush->刷新 // ends-> 输出空字符并刷新缓冲区
- 若每次输出操作后都刷新缓冲区,使用
unitbuf
,接下来的操作都进行一次flush操作。nounitbuf
则回到正常的缓冲方式。cout<<unitbuf //之后的输出均刷新
cout<<nounitbuf //回到正常缓冲方式
文件的输入输出
头文件fstream支持文件IO:ifstream 从一个给定文件读取数据,ofstream向一个给定文件写入数据,以及fstream可以读写给定文件。
基本操作
fstream my_file; //创建一个未绑定的文件流
my_file.open(s); //打开名为s的文件:s可以为string或字符串的指针
my_file.close()
my_file.is_open() //bool值,指出与my_file关联的文件是否打开
创建文件流方式:1)未绑定 2)绑定对象并打开fstream my_file(s)
3)绑定并以指定模式打开fstream my_file(s,mode|mode)
打开模式mode
ios::in 为输入(读)而打开文件
ios::out 为输出(写)而打开文件
ios::ate 初始位置:文件尾
ios::app 所有输出附加在文件末尾
ios::trunc 如果文件已存在则先删除该文件
ios::binary 二进制方式- ofstream 写文件 ifstream 读文件, 若写文件时文件不存在则新建
- 文件读写操作与cin,cout从控制台读写类似 举例:
ofstream out(); 写文件
out<<”…..”<>s
char buff[255]; in.getline(buff,100);Tip: getline 用法(1)若是读进数组,则采用上述方式(2)若读入string data,则直接getline(in,data);
写文件时,只有当模式为app时,才不会清除原文件。
string流的输入输出
- sstream 的类型有istringstream、ostringstream、stringstream,分别为读、写、读写
- sstream strm; //sstream strm(s) 保存string s 的一个拷贝
- strm.str();//返回strm中的值
- strm.str(s);// 将s拷贝到strm
- 注意
strm.str(s)
只能赋值一次,若想再赋值,需要strm.clear();
流的条件状态标志
- 假设s为某个流。如 iostream s // fstream s //sstream s
s.eof() 若到达流末尾则返回true
s.fail() 若流崩溃则返回true :读写过程中出问题,或写入设备无空间,或格式错误
s.bad() 若流崩溃则返回true :读写过程中出问题,或写入设备无空间
s.good() 流正常状态为true
一般使用s>>a
为判断条件,其实使用的是s.good()