news 2026/6/19 20:50:46

C++的IO流深入理解(下)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
C++的IO流深入理解(下)

1.C++ 文件 IO 流(文件交互)

文件流类继承自标准 IO 流,因此也支持<</>>运算符,同时扩展了文件操作的专属功能。


1. 核心文件流类
类名继承关系作用
ifstreamistream输入文件流(读取文件)
ofstreamostream输出文件流(写入文件)
fstreamiostream双向文件流(读写文件)
2. 基础用法


文件打开方式:通过构造函数或open()函数打开文件,可指定模式:

模式作用
ios::in读文件(默认ifstream
ios::out写文件(默认ofstream,会清空原文件)
ios::app追加写入(不清空文件,末尾添加)
ios::trunc清空文件(配合ios::out使用)
ios::binary二进制模式读写(不处理换行符)

示例:

// 方式1:构造函数直接打开 ofstream ofs("test.txt", ios::app); // 方式2:先创建对象,再open ifstream ifs; ifs.open("test.txt", ios::in);

打开状态判断:通过!ifs或ifs.is_open()判断文件是否成功打开:

if (!ifs.is_open()) { cerr << "文件打开失败!" << endl; return -1; }

文件读写操作:

文本模式(默认):用<</>>读写,或getline读取整行:

ofs << "hello world" << endl; // 写入文本 string line; getline(ifs, line); // 读取整行

二进制模式:用read()/write()直接按字节读写,适合非文本数据(如图片、结构体):

char buf[1024]; ifs.read(buf, sizeof(buf)); // 读取二进制数据 ofs.write(buf, sizeof(buf)); // 写入二进制数据

文件关闭:析构函数会自动调用close(),也可手动关闭释放资源。

2. 随机访问文件


通过文件指针操作实现文件的随机读写,核心函数:
1.seekg(pos):设置读指针位置(g=get)
2.seekp(pos):设置写指针位置(p=put)
3.tellg()/tellp():获取当前读 / 写指针位置

示例:

ifs.seekg(0, ios::end); // 读指针移到文件末尾 long size = ifs.tellg(); // 获取文件大小 ifs.seekg(0, ios::beg); // 读指针移回文件开头

3.stringstream 的简单介绍

1. 核心类:
类名作用
istringstream从字符串中读取数据(输入流)
ostringstream向字符串中写入数据(输出流)
stringstream支持读写双向操作
2. 常见应用场景
场景 1:数据类型转换(安全替代 C 的atoi/sprintf)
// 数字转字符串 int num = 12345; stringstream ss; ss << num; string str = ss.str(); // str = "12345" // 字符串转数字 string s = "6789"; int n; ss.clear(); // 重置流状态(关键!) ss.str(s); ss >> n; // n = 6789
场景 2:字符串分割(按空格 / 指定分隔符)
string line = "apple banana orange"; stringstream ss(line); string fruit; while (ss >> fruit) { // 按空格分割 cout << fruit << endl; }
场景 3:高效拼接字符串
ostringstream oss; oss << "姓名:" << "张三" << ", 年龄:" << 18; string info = oss.str(); // 比多次用+拼接更高效

4. 关键注意事项


1.重复使用stringstream时,需先调用ss.clear()重置流状态,再用ss.str("")清空底层字符串,否则残留数据会影响后续操作。
2.转换失败时,流会设置failbit,需通过ss.fail()检查状态。

补充:流的继承关系图

谢谢
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/19 20:50:06

Hermes Gateway 重启慢诊断全记录:从 29 秒到 6 秒的三层修复

Hermes Gateway 重启慢诊断全记录:从 29 秒到 6 秒的三层修复 问题 每次执行 systemctl restart hermes-gateway,都要等差不多半分钟才能用。29 秒的重启时间对于一个本地服务来说,太长了。 本文记录完整的排查过程——从抓日志到代码级热点定位,逐层拆解、逐层修复,每…

作者头像 李华
网站建设 2026/6/19 20:49:05

MonkeyCode 的可观测性体系:日志、监控与告警的完整方案

MonkeyCode 的可观测性体系&#xff1a;日志、监控与告警的完整方案当你管理着成百上千个用户容器时&#xff0c;"出了问题不知道"比"出了问题"更可怕。MonkeyCode 构建了一套完整的可观测性体系&#xff0c;让运维团队能够实时感知系统状态。可观测性的三…

作者头像 李华
网站建设 2026/6/14 6:11:13

MonkeyCode 与国产大模型:通义千问、DeepSeek、GLM的适配之路

MonkeyCode 与国产大模型&#xff1a;通义千问、DeepSeek、GLM的适配之路MonkeyCode 支持的AI模型中&#xff0c;国产模型占了半壁江山&#xff1a;通义千问&#xff08;Qwen&#xff09;、DeepSeek、智谱GLM、Kimi。适配国产模型不只是换一个API地址&#xff0c;还涉及Prompt优…

作者头像 李华
网站建设 2026/6/14 6:11:16

12个开源组件:构建你的智能知识管理系统

12个开源组件&#xff1a;构建你的智能知识管理系统 【免费下载链接】Obsidian-Templates A repository containing templates and scripts for #Obsidian to support the #Zettelkasten method for note-taking. 项目地址: https://gitcode.com/gh_mirrors/ob/Obsidian-Temp…

作者头像 李华
网站建设 2026/6/18 5:39:30

深度解析RTSPtoWeb:纯Go实现的实时视频流转换架构设计

深度解析RTSPtoWeb&#xff1a;纯Go实现的实时视频流转换架构设计 【免费下载链接】RTSPtoWeb RTSP Stream to WebBrowser 项目地址: https://gitcode.com/gh_mirrors/rt/RTSPtoWeb 在当今数字化监控和实时视频传输领域&#xff0c;RTSP协议作为行业标准被广泛应用于IP摄…

作者头像 李华