c++中如何逐行读取文件_c++ getline读取文件每一行【实例】
发布时间 - 2026-01-23 00:00:00 点击率:次std::getline是逐行读取文件最稳妥的方式,能完整保留每行原始内容(不含换行符),推荐循环条件为while (getline(file, line)),需检查文件是否成功打开。

用 std::getline 逐行读取文件是最稳妥的方式
直接用 operator>> 读字符串会跳过空白、无法处理含空格的整行,而 std::getline 按换行符切分,能完整保留每行原始内容(不含换行符本身)。前提是文件以文本模式打开,且流状态正常。
-
std::ifstream必须检查是否成功打开:if (!file.is_open())或if (!file) - 不要在
while (getline(...))外提前调用file.good()判断——它可能为true,但下一次getline仍失败 - Windows 换行符
\r\n会被std::getline自动识别并截断\n,无需额外处理
标准写法:while (getline(file, line)) 是唯一推荐循环条件
这个条件既检查读取是否成功,又自然处理 EOF 和读取失败(如磁盘错误)。用 !file.eof() 或 file.good() 做循环判断会导致最后一行重复或漏读。
std::ifstream file("data.txt");
std::string line;
while (std::getline(file, line)) {
std::cout << "Line: [" << line << "]\n";
}
if (file.bad()) {
std::cerr << "I/O error occurred.\n";
}
读取后需要解析数字?小心 std::stoi 抛异常
如果某行是纯数字(如 "42"),可直接用 std::stoi;但若含前导空格或非数字字符(如 " 42abc"),std::stoi 会截断解析并静默忽略尾部,而 "abc" 会抛 std::invalid_argument。更安全的做法是先 trim 再校验:
- 用
line.find_first_not_of(" \t")和line.find_last_not_of(" \t")手动去首尾空白 - 解析前用
line.empty() || line.find_first_of("0123456789-+") == std::string::npos粗筛(不完美但快) - 真正健壮的数字解析建议用
std::from_chars(C++17 起),它不抛异常、返回解析长度
大文件性能注意:std::string 复用比反复构造更快
每次循环中声明 std::string line; 看似简洁,但频繁分配/释放内存会影响吞吐。对 GB 级日志类文件,应复用同一 std::string 对象,并在循环开始前调用 line.clear() 或直接依赖 getline 的覆盖行为(它会重置长度并按需扩容)。
真正卡顿往往不在读取本身,而在后续处理——比如每行都做正则匹配或网络请求。把 I/O 和计算解耦(例如先批量读入 vector,再另起线程处理)才是关键优化点。
# go
# windows
# c++
# win
# stream
# EOF
# String
# if
# while
# 字符串
# 循环
# ifstream
# operator
# 线程
# 对象
# 换行符
# 不含
# 复用
# 切分
# 才是
# 而在
# 并在
# 自动识别
# 更快
# 可直接
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
如何挑选最适合建站的高性能VPS主机?
Laravel的契約(Contracts)是什么_深入理解Laravel Contracts与依赖倒置
青岛网站建设如何选择本地服务器?
Edge浏览器如何截图和滚动截图_微软Edge网页捕获功能使用教程【技巧】
如何基于PHP生成高效IDC网络公司建站源码?
Windows10电脑怎么设置虚拟光驱_Win10右键装载ISO镜像文件
bootstrap日历插件datetimepicker使用方法
打造顶配客厅影院,这份100寸电视推荐名单请查收
Python企业级消息系统教程_KafkaRabbitMQ高并发应用
如何在Windows环境下新建FTP站点并设置权限?
Laravel如何编写单元测试和功能测试?(PHPUnit示例)
如何快速搭建自助建站会员专属系统?
Java解压缩zip - 解压缩多个文件或文件夹实例
如何用VPS主机快速搭建个人网站?
北京的网站制作公司有哪些,哪个视频网站最好?
Laravel如何使用withoutEvents方法临时禁用模型事件
油猴 教程,油猴搜脚本为什么会网页无法显示?
美食网站链接制作教程视频,哪个教做美食的网站比较专业点?
Laravel如何设置自定义的日志文件名_Laravel根据日期或用户ID生成动态日志【技巧】
如何在自有机房高效搭建专业网站?
Laravel如何实现模型的全局作用域?(Global Scope示例)
ChatGPT常用指令模板大全 新手快速上手的万能Prompt合集
Laravel如何升级到最新版本?(升级指南和步骤)
Laravel如何使用Scope本地作用域_Laravel模型常用查询逻辑封装技巧【手册】
微信小程序 wx.uploadFile无法上传解决办法
laravel怎么配置Redis作为缓存驱动_laravel Redis缓存配置教程
英语简历制作免费网站推荐,如何将简历翻译成英文?
Laravel如何集成第三方登录_Laravel Socialite实现微信QQ微博登录
Internet Explorer官网直接进入 IE浏览器在线体验版网址
浏览器如何快速切换搜索引擎_在地址栏使用不同搜索引擎【搜索】
如何在 Go 中优雅地映射具有动态字段的 JSON 对象到结构体
Laravel怎么发送邮件_Laravel Mail类SMTP配置教程
JS去除重复并统计数量的实现方法
Laravel的路由模型绑定怎么用_Laravel Route Model Binding简化控制器逻辑
iOS UIView常见属性方法小结
UC浏览器如何设置启动页 UC浏览器启动页设置方法
Laravel如何优雅地处理服务层_在Laravel中使用Service层和Repository层
laravel怎么实现图片的压缩和裁剪_laravel图片压缩与裁剪方法
Chrome浏览器标签页分组怎么用_谷歌浏览器整理标签页技巧【效率】
如何用已有域名快速搭建网站?
如何在服务器上三步完成建站并提升流量?
如何在 React 中条件性地遍历数组并渲染元素
Win11怎么设置虚拟桌面 Win11新建多桌面切换操作【技巧】
Laravel如何发送邮件_Laravel Mailables构建与发送邮件的简明教程
如何批量查询域名的建站时间记录?
详解Nginx + Tomcat 反向代理 负载均衡 集群 部署指南
Win11摄像头无法使用怎么办_Win11相机隐私权限开启教程【详解】
Linux安全能力提升路径_长期防护思维说明【指导】
在线ppt制作网站有哪些软件,如何把网页的内容做成ppt?
微博html5版本怎么弄发语音微博_语音录制入口及时长限制操作【教程】

