- 所有的流都是由char类型组成的流。
- 在流前加上w,即变成支持宽字符的流,如wstream,wfstream。
- IO对象不可复制或赋值
- 不可放在vector等容器中,因为容器中元素必须支持复制
- 流不能作为形参或返回类型
- IO标准库状态:strm::iostate(值为badbit, failbit,eofbit)
- s.eof(), s.fail(), s.bad(), s.good() 返回bool
- s.clear() 将s的所有状态都设为有效状态
- s.clear(flag) 将s的flag状态设为有效 flag为strm::iostate
- s.setstate(flag) 给s添加指定条件
- s.rdstate() 返回s的当前条件
- 输出缓冲区管理
- cout<<flush 清空缓冲区
- cout<<ends 插入空字符,清空缓冲区
- cout<<endl 插入新行,清空缓冲区
- 文件流
- ifstream 读文件流 ofstream 写文件流 fstream 读写文件流
- 文件流初始化参数为char *
- 用一个流s打开多个文件时,每次不止要s.close(),而且要s.clear()
ifstream input;
vector<string>::const_iterator it = files.begin();
// for each file in the vector
while (it != files.end()) {
input.open(it->c_str()); // open the file
// if the file is ok, read and "process" the input
if (!input)
break; // error: bail out!
while(input >> s) // do the work on this file
process(s);
input.close(); // close file when we're done with it
input.clear(); // reset state to ok
++it; // increment iterator to get next file
} - 文件模式
- in 打开文件读
- out 打开文件写
- app 在每次写之前到文件尾
- ate 打开文件后即定位在文件尾
- trunc 打开文件时清空已存在的文件流
- binary 二进制方式
- 有效组合:
- out :打开文件写,删除已有数据
- out | app : 打开文件写,在文件尾追加
- out | trunc : 与out模式相同
- in : 打开文件读
- in | out : 打开文件读写,定位于文件开头处
- in | out | trunc : 打开文件做读写,删除已有数据
- 字符串流
- istringstream 读string; ostringstream 写string; stringstream 读写string
- 操作
- stringstream strm 空对象
- stringstream strm(s) s的副本,s为string
- strm.str() 返回string对象
- strm.str(s) 将s复制给strm
- 示例程序
-
string line, word; // will hold a line and word from input, respectively
while (getline(cin, line)) { // read a line from the input into line
// do per-line processing
istringstream stream(line); // bind to stream to the line we read
while (stream >> word){ // read a word from line
// do per-word processing
}
}