C++ 常用流类
·
头文件分3大类:<iostream>、<fstream>、<sstream>
一、标准 IO 流(控制台,<iostream>)
- istream:通用输入流基类
cin:istream的对象,标准输入(键盘),>>读数据。
- ostream:通用输出流基类
cout:ostream对象,标准输出(屏幕)cerr:标准错误输出,无缓冲,出错信息直接打印clog:标准错误输出,带缓冲
继承关系(记忆方法): istream → ifstream(文件读)、istringstream(内存字符串读) ostream → ofstream(文件写)、ostringstream(内存字符串写) iostream:同时继承 istream+ostream,可同时读写
二、文件流(<fstream>)
ifstream:文件输入(读文件),继承istreamofstream:文件输出(写文件),继承ostream- fstream:文件既能读又能写!继承
iostream
fstream io("test.txt", ios::in | ios::out | ios::binary);
| 是按位或,用来组合多个打开标志。
ios::in以读模式打开文件
ios::out以写模式打开文件
所以表示:文件可读、可写、二进制,文件原有内容保留,不会截断清空。
fstream 读写共用同一个文件指针:写之后读,指针已经跑到后面,想要从头读,需要手动seekg移动指针。
ios::in | ios::out:文件存在就打开保留内容;文件不存在会打开失败,不会新建文件。ios::out(单独):文件不存在新建,存在就清空截断
- 只有
fstream需要显式写ios::in | ios::out;ifstream默认自带ios::inofstream默认自带ios::out
in.is_open():判断文件是否打开成功(文件不存在、权限不够会打开失败)。seekg(偏移, 基准):移动读指针(g‑get)in.seekg(0, in.end);跳到文件末尾in.seekg(0, in.beg);跳回文件开头
tellg():返回当前读指针距离文件开头的字节数,用来获取文件大小,返回类型是streampos,尽量用要用long long接收
linux的HTTP代码应用:
(1)提取filename的内容到out

(2)求文件大小

三、字符串内存流(<sstream>,全部在内存,不操作磁盘)
- istringstream:只做读取,从字符串里提取数据(相当于内存版 ifstream)
- ostringstream:只做写入,把数据输出拼成字符串(内存版 ofstream)
- stringstream:可读可写,合并上面两个
应用场景:
>>自动按空白(空格、换行、tab)分割。
// istringstream 拆分
istringstream iss("10 20 hello");
int a,b; string s;
iss >> a >> b >> s;
// ostringstream 拼接
ostringstream oss;
oss << "num=" << 100;
string res = oss.str();

ss.str(""); 真正清空内部字符串 ss.clear();只清除流的错误标记,不会清空内容!一般配合str("")一起写
更多推荐



所有评论(0)