C++IO流
C++IO流
IO: 向设备输入数据和输出数据
C++的IO流设备: 文件、控制台、特定的数据类型(stringstream)
c++中,必须通过特定的已经定义好的类, 来处理IO(输入输出)
读写文件:文件流
文件流: 对文件进行读写操作
头文件: <fstream>
类库: ifstream 对文件输入(读文件)、ofstream 对文件输出(写文件)、fstream 对文件输入或输出
对文本文件流读写
文件打开方式:
模式标志 | 描述 |
ios::in | 读方式打开文件 |
ios:out | 写方式打开文件 |
ios::trunc | 如果此文件已经存在, 就会打开文件之前把文件长度截断为0 |
ios::app | 尾部最加方式(在尾部写入) |
ios::ate | 文件打开后, 定位到文件尾 |
ios::binary | 二进制方式(默认是文本方式) |
以上打开方式, 可以使用位操作 | 组合起来
写文本文件
#include <fstream> #include <iostream> #include <string> using namespace std; int main() { string name; int age; ofstream outfile; //也可以使用fstream, 但是fstream的默认打开方式不截断文件长度 // ofstream的默认打开方式是, 截断式写入 ios::out | ios::trunc // fstream的默认打开方式是, 截断式写入 ios::out // 建议指定打开方式 outfile.open("user.txt", ios::out | ios::trunc); while (1) { cout << "请输入姓名: [ctrl+z退出] "; cin >> name; if (cin.eof()) { //判断文件是否结束 break; } outfile << name << "\t"; cout << "请输入年龄: "; cin >> age; outfile << age << endl; //文本文件写入 } // 关闭打开的文件 outfile.close(); system("pause"); return 0; } |
读文本文件
#include <fstream> #include <iostream> #include <string> using namespace std; int main() { string name; int age; ifstream infile; infile.open("user.txt"); while (1) { infile >> name; if (infile.eof()) { //判断文件是否结束 break; } cout << name << "\t"; infile >> age; cout << age << endl; } // 关闭打开的文件 infile.close(); system("pause"); return 0; } |
对二进制文件流读写
思考:文本文件和二进制文件的区别?
文本文件: 写数字1, 实际写入的是 ‘1’。二进制文件:写数字1, 实际写入的是 整数1(4个字节,最低字节是1, 高3个字节都是0),写字符‘R’实际输入的还是‘R’
写二进制文件
使用文件流对象的write方法写入二进制数据
Demo
#include <fstream> #include <iostream> #include <string> using namespace std; int main() { string name; int age; ofstream outfile; outfile.open("user.dat", ios::out | ios::trunc | ios::binary); while (1) { cout << "请输入姓名: [ctrl+z退出] "; cin >> name; if (cin.eof()) { //判断文件是否结束 break; } outfile << name << "\t"; cout << "请输入年龄: "; cin >> age; //outfile << age << endl; //会自动转成文本方式写入 outfile.write((char*)&age, sizeof(age)); } // 关闭打开的文件 outfile.close(); system("pause"); return 0; } |
读二进制文件
使用文件流对象的read方法.
#include <fstream> #include <iostream> #include <string> using namespace std; int main() { string name; int age; ifstream infile; infile.open("user.dat", ios::in | ios::binary); while (1) { infile >> name; if (infile.eof()) { //判断文件是否结束 break; } cout << name << "\t"; // 跳过中间的制表符 char tmp; infile.read(&tmp, sizeof(tmp)); //infile >> age; //从文本文件中读取整数, 使用这个方式 infile.read((char*)&age, sizeof(age)); cout << age << endl; //文本文件写入 } // 关闭打开的文件 infile.close(); system("pause"); return 0; } |
对文件流按格式读写取数据
使用stringstream
按指定格式写文件
Demo
#include <fstream> #include <iostream> #include <string> #include <sstream> using namespace std; int main() { string name; int age; ofstream outfile; outfile.open("user.txt", ios::out | ios::trunc); while (1) { cout << "请输入姓名: [ctrl+z退出] "; cin >> name; if (cin.eof()) { //判断文件是否结束 break; } cout << "请输入年龄: "; cin >> age; stringstream s; s << "name:" << name << "\t\tage:" << age << endl; outfile << s.str(); } // 关闭打开的文件 outfile.close(); system("pause"); return 0; } |
按指定格式读文件
没有优雅的C++解决方案, 使用C语言的sscanf
#include <fstream> #include <iostream> #include <string> #include <sstream> #include <Windows.h> using namespace std; int main(void) { char name[32]; int age; string line; ifstream infile; infile.open("user.txt"); while (1) { getline(infile, line); if (infile.eof()) { //判断文件是否结束 break; } sscanf_s(line.c_str(), "姓名:%s 年龄:%d", name, sizeof(name),&age); cout << "姓名:" << name << "\t\t年龄:" << age << endl; } infile.close(); system("pause"); return 0; } |
文件流的状态检查
s.is_open( ) 文件流是否打开成功,
s.eof( ) 流s是否结束
s.fail( ) 流s的failbit或者badbit被置位时, 返回true
failbit: 出现非致命错误,可挽回, 一般是软件错误
badbit置位, 出现致命错误, 一般是硬件错误或系统底层错误, 不可挽回
s.bad( ) 流s的badbit置位时, 返回true
s.good( ) 流s处于有效状态时, 返回true
s.clear( ) 流s的所有状态都被复位
随机读写:文件流的定位
seekg
seekg( off_type offset, //偏移量
ios::seekdir origin ); //起始位置
作用:设置输入流的位置
参数1: 偏移量
参数2: 相对位置
beg 相对于开始位置
cur 相对于当前位置
end 相对于结束位置
demo
读取当前程序的最后50个字符
#include <iostream> #include <fstream> #include <string> using namespace std; int main(void) { ifstream infile; infile.open("定位.cpp"); if (!infile.is_open()) { return 1; } infile.seekg(-50, infile.end); while (!infile.eof()) { string line; getline(infile, line); cout << line << endl; } infile.close(); system("pause"); return 0; } |
tellg
返回该输入流的当前位置(距离文件的起始位置的偏移量)
Demo
获取当前文件的长度
#include <iostream> #include <fstream> #include <string> using namespace std; int main(void) { ifstream infile; infile.open("定位.cpp"); if (!infile.is_open()) { return 1; } // 先把文件指针移动到文件尾 infile.seekg(0, infile.end); int len = infile.tellg(); cout << "len:" << len; infile.close(); system("pause"); return 0; } |
seekp
设置该输出流的位置
先向新文件写入:“123456789”
然后再在第4个字符位置写入“ABC”
#include <iostream> #include <fstream> #include <string> using namespace std; int main(void) { ofstream outfile; outfile.open("test.txt"); if (!outfile.is_open()) { return 1; } outfile << "123456789"; outfile.seekp(4, outfile.beg); outfile << "ABC"; outfile.close(); system("pause"); return 0; } |
常见错误总结
文件没有关闭: close(),可能导致写文件失败
相关文章:
C++IO流
CIO流 IO: 向设备输入数据和输出数据 C的IO流设备: 文件、控制台、特定的数据类型(stringstream) c中,必须通过特定的已经定义好的类, 来处理IO(输入输出) 读写文件:文件流 文件流: 对文件进行读写操作 头文件: <fstream> 类库: ifstream 对文件输入&am…...
Swoole-添加自定义路由实现控制器访问
swoole本身不支持路由功能,默认情况我们实现路由访问可能要这样 $path $request->server[request_uri]switch ($path){case /favicon.ico:$response->status(404);$response->end(Not Found);break;case /abc/def/gg:$response->end("/abc/def/gg…...
Win10 关闭自动更新、关闭自动更新并重启
Windows 专业版及企业版用户可以通过组策略禁用或延迟更新。操作步骤如下: 按 Win R,输入 gpedit.msc 打开组策略编辑器。 导航到:计算机配置 > 管理模板 > Windows 组件 > Windows 更新。 修改以下设置: • 配置自…...
鸿道Intewell操作系统助力工业机器人控制系统自主可控
工业机器人与人形机器人的爆发式增长,正成为东土科技鸿道Intewell系统实现跨越式发展的核心引擎。从技术适配到生态重构,东土科技的三大核心能力与两大机器人赛道形成深度共振,其市场空间和产业地位将迎来指数级跃升。 一、工业机器人&…...
第十一届机械工程、材料和自动化技术国际会议(MMEAT 2025)
重要信息 官网:www.mmeat.net 时间:2025年06月23-25日 地点:中国-深圳 部分展示 征稿主题 智能制造和工业自动化 复合材料与高性能材料先进制造技术 自动化机器人系统 云制造与物联网集成 精密制造技术 智能生产线优化 实时数据分析与过…...
go语言八股文
1.go语言的接口是怎么实现 接口(interface)是一种类型,它定义了一组方法的集合。任何类型只要实现了接口中定义的所有方法,就被认为实现了该接口。 代码的实现 package mainimport "fmt"// 定义接口 type Shape inte…...
短视频广告创意策划简历模板
模板信息 简历范文名称:短视频广告创意策划简历模板,所属行业:其他 | 职位,模板编号:A4I63M 专业的个人简历模板,逻辑清晰,排版简洁美观,让你的个人简历显得更专业,找到…...
2.Spring MVC与WebFlux响应式编程
目录 一、Spring MVC核心机制与工作原理 • 请求处理流程:DispatcherServlet分发机制、HandlerMapping与HandlerAdapter • 核心组件:ViewResolver、ModelAndView、拦截器(Interceptor) • 注解驱动开发:Controller、…...
【重走C++学习之路】16、AVL树
目录 一、概念 二、AVL树的模拟实现 2.1 AVL树节点定义 2.2 AVL树的基本结构 2.3 AVL树的插入 1. 插入步骤 2. 调节平衡因子 3. 旋转处理 4. 开始插入 2.4 AVL树的查找 2.5 AVL树的删除 1. 删除步骤 2. 调节平衡因子 3. 旋转处理 4. 开始删除 结语 一、概念 …...
蓝桥杯 19.合根植物
合根植物 原题目链接 题目描述 W 星球的一个种植园被分成 m n 个小格子(东西方向 m 行,南北方向 n 列)。每个格子里种了一株合根植物。 这种植物有个特点,它的根可能会沿着南北或东西方向伸展,从而与另一个格子的…...
爆改 toxml 组件 支持数据双向绑定 解决数据刷新问题
GGGGGGGGGGGGGGGGGithub地址自行研究 sbfkcel/towxml: 微信小程序HTML、Markdown渲染库https://github.com/sbfkcel/towxml原组件是以导入数据渲染信息为目的、本文以AI数据返回小程序为模拟效果演示 默认情况只在ready 环节进行渲染静态资源 1、对传入数据容器的位置做处理 …...
6.分布式数据库与分库分表
目录 一、分库分表核心概念 • 核心目标:突破单库性能瓶颈,应对海量数据与高并发 • 垂直拆分:按业务模块拆分(用户库、订单库、商品库) • 水平拆分:单表数据分片(用户ID取模…...
基于javaweb的SSM+Maven小区失物招领系统设计与实现(源码+文档+部署讲解)
技术范围:SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:免费功能设计、开题报告、任务书、中期检查PPT、系统功能实现、代码编写、论文编写和辅导、论文…...
Kubernetes finalize | namespace卡Terminatingfinalizers删除失败
目录 1、为什么会卡住?2、强制删除卡住的 Namespace:操作步骤1:导出当前 namespace 信息2:启动代理(另一个终端)以便使用 Kubernetes API Server3:使用 curl 强制删除 finalize 3、进阶排查&…...
Java数组
目录 一、定义 二、使用 2.1遍历数组 2.2获取数组长度 三、Arrays类 3.1数组填充 3.2数组排序 3.3数组转为字符串 3.4数组比较 3.5二分搜索 3.6数组复制 二维数组 一、定义 数组表示一个相同类型元素的集合 对于一个数组,可以有以下几种定义方法 int[…...
高级java每日一道面试题-2025年4月22日-基础篇[反射篇]-如何通过反射创建一个对象实例?
如果有遗漏,评论区告诉我进行补充 面试官: 如何通过反射创建一个对象实例? 我回答: 在Java中,反射(Reflection)是一种强大的工具,允许程序在运行时检查和操作类、接口、字段和方法。反射不仅用于检查类的结构&#…...
Spring开发系列教程(26)——异步处理
在Servlet模型中,每个请求都是由某个线程处理,然后,将响应写入IO流,发送给客户端。从开始处理请求,到写入响应完成,都是在同一个线程中处理的。 实现Servlet容器的时候,只要每处理一个请求&…...
【2025最新Java面试八股】如何理解MySQL的MVCC机制?
面试回答要点 当面试官问及MySQL的MVCC机制时,可以这样组织回答: "MVCC(Multi-Version Concurrency Control,多版本并发控制)是MySQL实现高并发事务的一种重要机制,它通过保存数据在某个时间点的快照来实现非阻塞读操作。I…...
使用FreeRTOS解决单片机串口异步打印
单片机串口异步打印 文章目录 单片机串口异步打印前言设计思路准备队列创建完整代码 总结 前言 🌊在单片机开发中串口的异步打印异步打印允许单片机在执行其他任务的同时进行打印操作,无需等待打印完成后再继续执行后续代码,避免了在多处调用…...
飞算 JavaAI 与 Spring Boot:如何实现微服务开发效率翻倍?
微服务架构凭借其高内聚、低耦合的特性,成为企业构建复杂应用系统的首选方案。然而,传统微服务开发流程中,从服务拆分、接口设计到代码编写、调试部署,往往需要耗费大量时间与人力成本。Spring Boot 作为 Java 领域最受欢迎的微服…...
Python 列表与元组深度解析:从基础概念到函数实现全攻略
在 Python 编程的广袤天地中,列表(List)和元组(Tuple)是两种不可或缺的数据结构。它们如同程序员手中的瑞士军刀,能高效地处理各类数据。从简单的数值存储到复杂的数据组织,列表和元组都发挥着关…...
vue 修改路由动态选择路由 改文件位置
vue 修改路由动态选择路由 改文件位置 main.jspermission.js...
Nginx openresty web服务 与 Go 原生web服务性能对比
1 概述 Nginx采用的是IO复用模型,能处理超高并发。 Go语言采用协程,能轻量级的处理超高并发。 那么在不考虑业务逻辑复杂的前提下,即假如将Nginx和Go都提供一个/test接口,并在接口逻辑中都只是让其做20毫秒的耗时操作,…...
【音视频】FFmpeg解封装
解封装 复用器,比如MP4/FLV 解复用器,MP4/FLV 封装格式相关函数 avformat_alloc_context(); 负责申请一个AVFormatContext结构的内存,并进行简单初始化avformat_free_context(); 释放该结构里的所有东西以及该结构本身avformat_close_input();关闭解复…...
autohue.js - 基于 JavaScript 开发的图片背景色提取开源库,能让图片和背景融为一体
图片提取主题色的工具库,可以实现一些酷炫的界面效果。 本文不是 AI 生成,大部分文字都是我自己敲键盘,部分文字摘自 autohue.js 作者主页,请各位放心舒适阅读。 autohue.js 是一个图片背景色提取库,基于提出来的颜色…...
bgp实验.包括联盟,隧道相关,以及一个低级错误
实验拓扑 低级错误 在配置隧道时,目标的单词是destination,我自动补全为description了,这个问题花了我40分钟 划分ip AS2内骨干网,一个网段需要两个地址,主机位2位,掩码30 需要6个 172.16.0.000000 00 172.16.0.0/30 172.16.0.000001 00 172.16.0.4/30 172.16.0.000010 00 1…...
科普动画短视频制作:角色塑造的魅力法则
宝子们,在科普动画短视频的世界里,角色塑造可是让作品出彩的关键!今天就来和大家唠唠那些超实用的角色塑造法则,还会给大家推荐一款超好用的工具哦~ 一、独特外形,吸睛第一步 在科普动画短视频制作中,角色…...
【飞渡科技数字孪生虚拟环境部署与集成教程 - CloudMaster实战指南】
飞渡科技数字孪生虚拟环境部署与集成教程 - CloudMaster实战指南 前言 本教程详细记录了飞渡科技的数字孪生平台CloudMaster的配置过程,以及如何将三维数字孪生场景集成到前端项目中。数字孪生技术能够在虚拟环境中精确复现物理实体的数据、特性和行为,…...
MongoDB 集合名称映射问题
项目场景 在使用 Spring Data MongoDB 进行开发时,定义了一个名为 CompetitionSignUpLog 的实体类,并创建了对应的 Repository 接口。需要明确该实体类在 MongoDB 中实际对应的集合名称是 CompetitionSignUpLog 还是 competitionSignUpLog。 问题描述 …...
禁止ubuntu自动更新
由于ubuntu server和desktop版本都默认 启动了,自动更新内核的操作。这对于生 产环境来说是不友好的。容易导致亿赛通 无法启动 默认开启了内核自动更新所以我们关闭自 动内核更新。 1.禁止更新执行 sudo apt-mark hold linux-image-generic linux-headers-generic…...
【C++】——入门基础(一)
前言 这是我C的第一篇文章,如果你想从事入门C行业,可以看看这幅漫画 当然,这只是一个玩笑,但如过你真的想学习C,和我一起学习吧 本人其他博客;恋风诗 本文出现的代码见gitte:mozhengy 这里写目录标题 前言1. C发展历史…...
[原创](现代Delphi 12指南):[macOS 64bit App开发]:在Mac App Store外创建、部署与公证
[作者] 常用网名: 猪头三 出生日期: 1981.XX.XX 企鹅交流: 643439947 个人网站: 80x86汇编小站 编程生涯: 2001年~至今[共24年] 职业生涯: 22年 开发语言: C/C++、80x86ASM、Object Pascal、Objective-C、C#、R、Python、PHP、Perl、 开发工具: Visual Studio、Delphi、XCode、…...
美乐迪电玩客户端打包与资源替换实战教程
本篇为《美乐迪电玩全套系统搭建》系列的第二篇,聚焦客户端层的实战操作,主要面向前端开发者、美术资源替换人员及整体项目的打包部署人员。教程将涵盖安卓客户端的构建、资源目录说明、动画素材替换方式及常见适配问题处理等。 一、客户端项目结构说明&…...
多态以及多态底层的实现原理
本章目标 1.多态的概念 2.多态的定义实现 3.虚函数 4.多态的原理 1.多态的概念 多态作为面对三大特性之一,它所指代的和它的名字一样,多种形态.但是这个多种形态更多的指代是函数的多种形态. 多态分为静态多态和动态多态. 静态多态在前面已经学习过了,就是函数重载以及模板,…...
描述城市出行需求模式的复杂网络视角:大规模起点-目的地需求网络的图论分析
描述城市出行需求模式的复杂网络视角:大规模起点-目的地需求网络的图论分析 原文: A complex network perspective for characterizing urban travel demand patterns: graph theoretical analysis of large-scale origin–destination demand networks…...
文件操作函数
本文是小编巩固自身而作,如有错误,欢迎指出! 1.使用文件的原因 我们编写的程序都是有生命周期的,储存在电脑的内存中,如果程序退出,内存回收,数据就会丢失,等程序再次运行…...
Java高频面试之并发编程-05
hello啊,各位观众姥爷们!!!本baby今天来报道了!哈哈哈哈哈嗝🐶 面试官:线程有哪些调度方法? 在Java中,线程的调用方法主要包括以下几种方式,每种方式适用于…...
LeetCode 1292 元素和小于等于阈值的正方形的最大边长
最大正方形边长问题详解 一、问题描述 给定一个大小为 mn 的矩阵 mat 和一个整数阈值 threshold,要求返回元素总和小于或等于阈值的正方形区域的最大边长;如果没有这样的正方形区域,则返回 0。 二、解题思路 前缀和矩阵的概念与构建 前缀…...
测试开发 - Java 自动化测试核心函数详解
目录 1. 元素定位 1.1 By.xpath 1.1.1 //* 1.1.2 //[指定节点] 1.1.3 / 1.1.4 /.. 1.1.5 [...] 1.1.6 指定索引获取对应元素 1.2 By.cssSelector 1.2.1 # 1.2.2 . 1.2.3 > 1.2.4 标签名:nth-child(n) 2. 获取元素 2.1 findElement 2.2 findElements 3. 操…...
【HarmonyOS】ArKUI框架
目录 概述 声明式开发范式 基于ArKUI的项目 • 1.创建资源文件 • 2.引用资源 • 3.引用系统资源: • 系统资源有哪些 • 4. 在配置和资源中引用资源 声明式语法 UI描述规范 UI组件概述 组件化 组件渲染控制语法 修改…...
【MQ篇】RabbitMQ之简单模式!
目录 引言一、 初识 RabbitMQ 与工作模式二、 简单模式 (Simple Queue) 详解:最直接的“点对点快递” 📮三、 Java (Spring Boot) 代码实战:让小兔子跑起来! 🐰🏃♂️四、 深入理解:简单模式的…...
K8S节点出现Evicted状态“被驱逐”
在Kubernetes集群中,Pod状态为“被驱逐(evicted)”表示Pod无法在当前节点上继续运行,已被集群从节点上移除。 问题分析: 节点磁盘空间不足 ,使用df -h查看磁盘使用情况 可以看到根目录 / 已100%满&#x…...
NumPyro:概率编程的现代Python框架深度解析
引言 概率编程作为统计学与机器学习的交叉领域,正在重塑我们构建不确定性模型的方式。在众多概率编程语言(PPL)中,NumPyro凭借其简洁的语法、强大的性能和与PyTorch生态系统的无缝集成,已经成为研究者和数据科学家的首…...
java进阶之git
git git介绍git常用命令代码回滚操作 git 介绍 工作区 改动(增删文件和内容)暂存区 输入命令:git add改动的文件名,此次改动就放到了"暂存区“本地仓库 输入命令:git commit 此次修改的描述,此次改动…...
负载阻尼效应及其作用解析
负载阻尼效应是指负载(如电路、机械系统或控制系统中连接的设备)对系统动态变化(如电压波动、机械振动等)产生的抑制或衰减作用。 其核心是通过消耗或吸收能量,减少系统中的振荡、波动或瞬态响应,从而提高…...
面向组织的网络安全措施
一、安全措施概述 在一个组织中,技术人员可以利用一系列强大的网络安全工具进行安全检测和防范,以保护组织的网络基础设施、数据和资产免受各种威胁。这些工具通常涵盖了从主动防御、威胁检测、漏洞管理到事件响应和安全分析的各个方面。 以下是一些关…...
Unity 跳转资源商店,并打开特定应用
需求: 打开资源商店,并定位到特定应用. 代码: #if UNITY_ANDROIDApplication.OpenURL("market://details?idcom.tencent.mm"); #elif UNITY_IPHONEApplication.OpenURL(“itms-apps://apps.apple.com/app/id333903271”); #end…...
2025年五大ETL数据集成工具推荐
ETL工具作为打通数据孤岛的核心引擎,直接影响着企业的决策效率与业务敏捷性。本文精选五款实战型ETL解决方案,从零门槛的国产免费工具到国际大厂企业级平台,助您找到最适合的数据集成利器。 一、谷云科技ETLCloud:国产数据集成工…...
基于 PaddleOCR对pdf文件中的文字提取
一、基于 PaddleOCR 提取 PDF 文件中的文字流程 1. 安装必要的依赖库:包括 PaddleOCR 和 PyMuPDF pip install paddlepaddle paddleocr pymupdf 2. 将 PDF 转换为图像:使用 PyMuPDF 将 PDF 的每一页转换为图像 3. 使用 PaddleOCR 进行文字识别&a…...
鸿蒙移动应用开发--渲染控制实验
任务:使用“对象数组”、“ForEach渲染”、“Badge角标组件”、“Grid布局”等相关知识,实现生效抽奖卡案例。如图1所示: 图1 生肖抽奖卡实例图 图1(a)中有6张生肖卡可以抽奖,每抽中一张,会通过弹层显示出来…...