c++中如何读取txt文件_c++读取文件内容实现
发布时间 - 2026-01-04 00:00:00 点击率:次最稳妥方式是用std::getline()配合std::ifstream:构造时传路径自动文本模式打开,用if(file)检查是否成功,每次getline读一行,自动处理不同系统换行符。
用 std::ifstream 逐行读取文本文件最稳妥
直接用 operator>> 读字符串会跳过空白、截断空行,实际读取内容常和文件不一致。推荐始终用 std::getline() 配合 std::ifstream。
-
std::ifstream构造时传入文件路径,自动以文本模式打开(无需手动指定std::ios::in) - 检查
is_open()或直接用if (file)判断是否成功打开,避免后续静默失败 - 每调用一次
std::getline(file, line)读取一行(含换行符前的内容),遇到 EOF 自动返回false - Windows 下的
\r\n和 Linux 的\n均被std::getline()正确处理,无需额外兼容
std::ifstream file("data.txt");
if (!file.is_open()) {
std::cerr << "无法打开文件\n";
return;
}
std::string line;
while (std::getline(file, line)) {
std::cout << "读到: " << line << "\n";
}
读取整个文件到 std::string 要小心缓冲区和编码
想一次性加载全部内容(比如解析 JSON 或配置),不能简单用 rdbuf() + std::string 构造,否则可能因 null 字节或宽字符导致截断或乱码。
- 用
file.seekg(0, std::ios::end)获取文件大小,再seekg(0)回开头 - 分配足够空间:用
std::string content(size, '\0'),再用file.read(&content[0], size) - 注意:
file.read()不自动添加结尾 \0,且不保证读满——需检查gcount()是否等于预期字节数 - 若文件含 UTF-8 BOM(
\xEF\xBB\xBF),需手动跳过前 3 字节,否则解析会出错
std::ifstream 默认按系统 locale 解码,中文路径或内容可能失败
在 Windows 上,如果文件路径含中文(如 "测试.txt"),或文件本身是 GBK 编码,std::ifstream 构造会直接失败或读出乱码。
- Windows 下优先改用
std::wifstream+std::wstring,并设置 locale:file.imbue(std::locale(".936"))(GBK)或(".65001")(UTF-8) - 跨平台项目建议统一用 UTF-8 编码保存 txt 文件,并确保编译器/IDE 也以 UTF-8 读取源码(避免硬编码中文路径出问题)
- Linux/macOS 一般无此问题,但若 locale 为
C,仍可能无法处理非 ASCII 路径——可用setlocale(LC_ALL, "")初始化
读取失败时常见错误信息和排查点
不检查流状态就继续读,会导致无限循环或未定义行为。关键错误信号不是异常(默认不抛异常),而是流的内部标志位。
立即学习“C++免费学习笔记(深入)”;
-
file.fail():格式错误或读取失败(如期望数字却读到字母) -
file.bad():底层 I/O 错误(磁盘损坏、权限不足) -
file.eof():仅表示上次操作触达 EOF,**不能用来驱动 whil
e 循环条件**(否则最后一行可能重复处理) - 典型误写:
while (!file.eof()) { getline(file, line); ... }—— 这会在 EOF 后多执行一次循环
真正安全的循环只有两种写法:while (getline(file, line)) 或 while (file >> value),依赖提取操作本身的返回值判断成败。
# linux
# windows
# c++
# ios
# win
# stream
# json
# EOF
# String
# NULL
# if
# while
# 字符串
# 循环
# ifstream
# operator
# bom
# ASCII
# ide
# macos
# 读到
# 跳过
# 换行符
# 两种
# 再用
# 要小心
# 错误信息
# 这会
# 文本文件
# 也以
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
在Oracle关闭情况下如何修改spfile的参数
JavaScript如何实现继承_有哪些常用方法
免费的流程图制作网站有哪些,2025年教师初级职称申报网上流程?
Win11关机界面怎么改_Win11自定义关机画面设置【工具】
Java解压缩zip - 解压缩多个文件或文件夹实例
Laravel如何生成PDF或Excel文件_Laravel文档导出工具与使用教程
如何快速上传自定义模板至建站之星?
google浏览器怎么清理缓存_谷歌浏览器清除缓存加速详细步骤
Android okhttputils现在进度显示实例代码
Laravel如何使用Blade组件和插槽?(Component代码示例)
如何将凡科建站内容保存为本地文件?
如何在服务器上三步完成建站并提升流量?
Python文件流缓冲机制_IO性能解析【教程】
Android中Textview和图片同行显示(文字超出用省略号,图片自动靠右边)
Laravel怎么创建自己的包(Package)_Laravel扩展包开发入门到发布
专业型网站制作公司有哪些,我设计专业的,谁给推荐几个设计师兼职类的网站?
使用spring连接及操作mongodb3.0实例
标题:Vue + Vuex 项目中正确使用 JWT 进行身份认证的实践指南
高端建站三要素:定制模板、企业官网与响应式设计优化
想要更高端的建设网站,这些原则一定要坚持!
Laravel怎么连接多个数据库_Laravel多数据库连接配置
C语言设计一个闪闪的圣诞树
如何在阿里云完成域名注册与建站?
如何在万网自助建站中设置域名及备案?
JavaScript如何实现倒计时_时间函数如何精确控制
如何在腾讯云服务器快速搭建个人网站?
如何在香港免费服务器上快速搭建网站?
如何快速生成ASP一键建站模板并优化安全性?
如何快速搭建高效简练网站?
Laravel怎么在Controller之外的地方验证数据
Win11怎么查看显卡温度 Win11任务管理器查看GPU温度【技巧】
Laravel怎么导出Excel文件_Laravel Excel插件使用教程
学生网站制作软件,一个12岁的学生写小说,应该去什么样的网站?
中山网站制作网页,中山新生登记系统登记流程?
Laravel如何创建自定义中间件?(Middleware代码示例)
香港服务器如何优化才能显著提升网站加载速度?
如何用y主机助手快速搭建网站?
Laravel API路由如何设计_Laravel构建RESTful API的路由最佳实践
香港服务器网站推广:SEO优化与外贸独立站搭建策略
Mybatis 中的insertOrUpdate操作
如何在云主机上快速搭建网站?
Laravel如何自定义分页视图?(Pagination示例)
Laravel Sail是什么_基于Docker的Laravel本地开发环境Sail入门
简历没回改:利用AI润色让你的文字更专业
MySQL查询结果复制到新表的方法(更新、插入)
Laravel路由Route怎么设置_Laravel基础路由定义与参数传递规则【详解】
合肥制作网站的公司有哪些,合肥聚美网络科技有限公司介绍?
Python高阶函数应用_函数作为参数说明【指导】
油猴 教程,油猴搜脚本为什么会网页无法显示?
如何在新浪SAE免费搭建个人博客?


e 循环条件**(否则最后一行可能重复处理)