C++ | 高级教程 | 文件和流
👻 概念
文件流输出使用标准库 fstream,定义三个新的数据类型:
| 数据类型 | 描述 |
|---|---|
ofstream | 输出文件流,用于创建文件并向文件写入信息。 |
ifstream | 输入文件流,用于从文件读取信息。 |
fstream | 文件流,且同时具有 ofstream 和 ifstream 两种功能,意味着可以创建文件,写入信息,读取信息 |
👻 准备工作
- 使用文件流需要包含
<iostream>和<fstream>头文件
#include <fstream>
#include <iostream>
👻 打开文件
👾语法格式
使用 open() 函数打开文件,是 fstream、ifstream 、ofstream 对象的成员
void open(const char *filename, ios::openmode mode);
-
参数
filename—— 打开文件的名称和位置 -
参数
mode—— 文件被打开的模式模式标志 描述 ios::app追加模式,所有写入都追加到文件末尾 ios::ate文件打开后定位到文件末尾 ios::in打开文件用于读取 ios::out打开文件用于写入 ios::trunc如果该文件已经存在,其内容将在打开文件之前被截断,即把文件长度设为 0
👾示例代码
-
示例1:以写入模式打开文件,并希望截断文件,以防文件已存在
ofstream outfile; outfile.open("file.dat", ios::out | ios::trunc ); -
示例2:打开一个文件用于读写
ifstream infile; infile.open("file.dat", ios::out | ios::in );
👻 关闭文件
👾语法格式
使用 close() 函数打开文件,是 fstream、ifstream 、ofstream 对象的成员。
程序终止时,会自动关闭刷新所有流,释放所有分配的内存,并关闭所有打开的文件
void close();
👾示例代码
outfile.close();
👻 写入文件
👾语法格式
使用流插入运算符 << 向文件写入信息,使用的是 ofstream 或 fstream 对象
ofstream << data;
👻 读取文件
👾语法格式
使用流提取运算符 >> 向文件写入信息,使用的是 ifstream 或 fstream 对象
ifstream >> data;
👻 文件位置指针
👾语法格式
使用 istream 的 seekg(seek get)和关于 ostream 的 seekp(seek put)重新定位文件位置指针。
istream& seekg(streampos pos);
ostream& seekp(streampos pos);
-
参数
pos—— 直接定位到流中的绝对位置,其中streampos是一个表示流位置的类型istream& seekg(streamoff off, ios::seekdir dir); ostream& seekp(streamoff off, ios::seekdir dir); -
参数
off—— 偏移量(正数/负数) -
参数
dir—— 定位方向模式标志 描述 ios::beg从流的开头开始计算偏移量 ios::cur从当前读取位置开始计算偏移量 ios::end从流的末尾开始计算偏移量
👾示例代码
文件位置指针是一个整数值,指定了从文件的起始位置到指针所在位置的字节数。
// 定位到 fileObject 的第 n 个字节(假设是 ios::beg)
fileObject.seekg(n);// 把文件的读指针从 fileObject 当前位置向后移 n 个字节
fileObject.seekg(n, ios::cur);// 把文件的读指针从 fileObject 末尾往回移 n 个字节
fileObject.seekg(n, ios::end);// 定位到 fileObject 的末尾
fileObject.seekg(0, ios::end);
👻 综合实例
char data[100];// 写模式打开文件
ofstream outfile;
outfile.open("test.txt");
cout << "Writing to the file" << endl;// 写入数据
cout << "Enter your name: ";
cin.getline(data, 100);
outfile << data << endl;cout << "Enter your age: ";
cin >> data;
cin.ignore();
outfile << data << endl;// 关闭文件
outfile.close();
char data[100];// 读模式打开文件
ifstream infile;
infile.open("test.txt");
cout << "Reading from the file" << endl;// 读取数据
infile >> data;
cout << data << endl;
infile >> data;
cout << data << endl;// 关闭文件
infile.close();
cin.getline( )与cin >>区别
cin.getline( )cin >>读取方式 按行读取 —— 读取输入流中的字符,直到遇到换行符 \n为止,并将换行符之前的字符存储到目标字符串中。逐个单词读取 —— 读取输入流中的下一个非空白字符,直到遇到空白字符(如空格、制表符 \t、换行符\n)为止前导空白字符 从当前输入流的位置开始读取,不跳过前导空白字符 跳过输入流前面所有前导空白字符 存储换行符 读取到换行符为止,存储换行符之前的字符,并自动处理换行符 不会读取换行符 清理缓冲区 自动处理换行符,不需要额外清理缓冲区 手动清理输入缓冲区中的换行符,如使用 cin.ignore()用途 读取整行文本 读取单个单词或数字 理解 输入 ABCDEFG\n,读取ABCDEFG\n,并自动处理换行符,输入变量值为ABCDEFG,缓冲区为空输入 ABCDEFG\n,读取ABCDEFG,输入变量值为ABCDEFG,缓冲区为\n,为避免影响后面的输入,需要手动清理
cin.ignore( )的作用主要用于清除缓冲区中的换行符,以避免影响后续的输入操作,即手动清理缓冲区。对代码:
cout << "Enter your name: "; cin.getline(data, 100); // 读取姓名 outfile << data << endl;cout << "Enter your age: "; cin >> data; // 读取年龄 cin.ignore(); // 清除缓冲区中的换行符 outfile << data << endl;cout << "Enter your address: "; cin.getline(data, 100); // 读取地址 outfile << data << endl;如果移除
cin.ignore()语句,
- 缓冲区中的换行符
\n会被cin.getline()读取,导致data被赋值为空字符串,该输入被跳过。- 文件中写入的内容会变成:
John Doe 25
如果使用了
cin.ignore(),
- 缓冲区中的换行符会被清除,
cin.getline()会正确读取用户输入的地址。- 文件中写入的内容会是:
John Doe 25 Your Address
相关文章:
C++ | 高级教程 | 文件和流
👻 概念 文件流输出使用标准库 fstream,定义三个新的数据类型: 数据类型描述ofstream输出文件流,用于创建文件并向文件写入信息。ifstream输入文件流,用于从文件读取信息。fstream文件流,且同时具有 ofst…...
Starlink卫星动力学系统仿真建模第九讲-滑模(SMC)控制算法原理简介及卫星控制应用
滑模控制(Sliding Mode Control)算法详解 一、基本原理 滑模控制(Sliding Mode Control, SMC)是一种变结构控制方法,通过设计一个滑模面(Sliding Surface),迫使系统状态在有限时间内…...
JVM相关面试题
1. 类加载与双亲委派机制 聊一下你对类加载器的理解。 类加载器是JVM用来加载类文件到内存的组件。它负责将字节码文件解析为java.lang.Class实例,并存储到运行时数据区的方法区中。类加载器分为Bootstrap ClassLoader、Extension ClassLoader和Application ClassLo…...
WiFi定位:宠物安全的“秘密武器”
从「全网寻狗」到「实时掌控」的进化史 凌晨三点收到邻居转发的「寻狗启事」,配图里的金毛犬项圈上赫然挂着某品牌定位器 —— 这样的魔幻场景在养宠圈并不罕见。随着宠物经济突破 3000 亿规模,智能定位器早已从「小众玩具」变成「刚需装备」。但你知道…...
【git】【reset全解】Git 回到上次提交并处理提交内容的不同方式
Git 回到上次提交并处理提交内容的不同方式 在 Git 中,若要回到上次提交并对提交内容进行不同处理,可使用 git reset 命令搭配不同选项来实现。以下为你详细介绍操作步骤及各选项的作用。 1. 查看提交历史 在操作之前,可通过以下命令查看提…...
【leetcode hot 100 11】移动零
一、暴力解法:两个 for 循环,外层循环遍历所有可能的左边界,内层循环遍历所有可能的右边界 class Solution {public int maxArea(int[] height) {int max_area0;for(int i0; i<height.length; i){for(int ji1; j<height.length; j){in…...
DeepSeek 部署实战:Ollama + 多客户端 + RAG
DeepSeek 部署实战:Ollama 多客户端 RAG 一、前置条件 (一)硬件要求 GPU:强烈建议使用 NVIDIA RTX 3090 或更高型号,显存至少 24GB。小显存跑大模型会遇到诸多问题,本人亲测 2080Ti 跑模型体验不佳。内…...
Linux通过设备名称如何定位故障硬盘
因为ceph集群的服务器硬盘都是直通的,当我们发现有硬盘存储坏道需要更换硬盘,但是因为盘序可能不是连续的,无法定位服务器上那块硬盘是故障的,如果冒然测试可能把正常的硬盘拔出,得不偿失,所以就写一下我定…...
大模型基础概念之神经网络宽度
在大模型中,神经网络宽度是提升模型容量的核心手段之一,与深度、数据规模共同构成性能的三大支柱。合理增加宽度可显著增强模型表达能力,但需结合正则化、硬件优化和结构设计进行平衡。未来趋势可能包括动态宽度调整、稀疏化宽度设计(如MoE)以及更高效宽度-深度复合缩放策…...
数据开发的简历及面试
简历 个人信息: 邮箱别写QQ邮箱, 写126邮箱/189邮箱等 学历>>本科及以上写,大专及以下不写 专业>>非计算机专业不写 政治面貌>>党员写, 群众不用写 掌握的技能: 精通 > 熟悉 > 了解 专业工具: 大数据相关的 公司: 如果没有可以写的>>金融服…...
数据存储:一文掌握存储数据到ElasticSearch详解
文章目录 一、Elasticsearch简介二、Python与Elasticsearch交互2.1 安装必要的库2.2 连接到Elasticsearch服务器 三、数据准备四、创建索引(可选)五、存储数据5.1 单个文档索引5.2 批量索引 六、查询数据七、更新和删除数据7.1 更新文档7.2 删除文档 八、…...
Pytorch使用手册--将 PyTorch 模型导出为 ONNX(专题二十六)
注意 截至 PyTorch 2.1,ONNX 导出器有两个版本。 torch.onnx.dynamo_export 是最新的(仍处于测试阶段)导出器,基于 PyTorch 2.0 发布的 TorchDynamo 技术。 torch.onnx.export 基于 TorchScript 后端,自 PyTorch 1.2.0 起可用。 一、torch.onnx.dynamo_export使用 在 60 …...
Vue2+Element实现Excel文件上传下载预览
目录 一、需求背景 二、落地实现 1.文件上传 图片示例 HTML代码 业务代码 2.文件下载 图片示例 方式一:代码 方式二:代码 3.文件预览 图片示例 方式一:代码 方式二:代码 一、需求背景 在一个愉快的年后ÿ…...
物联网平台建设方案一
系统概述 构建物联网全域支撑服务能力,为实现学院涵盖物联网设备的全面感知、全域互联、全程智控、全域数字基底、全过程统筹管理奠定基础,为打造智能化提供坚实后台基石。 物联网平台向下接入各种传感器、终端和网关,向上通过开放的实施分…...
机器学习破局指南:零基础6个月系统训练计划
以下是为零基础学习者制定的「机器学习」系统学习计划(含学习路径资源推荐),分为6个阶段,建议学习周期4-6个月: 一、基础准备阶段(1-2周) 目标:掌握必要数学工具与编程基础 数学基础…...
mmdetection框架下使用yolov3训练Seaships数据集
之前复现的yolov3算法采用的是传统的coco数据集,这里我需要在新的数据集上跑,也就是船舶检测方向的SeaShips数据集,这里给出教程。 Seaships论文链接:https://ieeexplore.ieee.org/stamp/stamp.jsp?tp&arnumber8438999 一、…...
unity学习52:UI的最基础组件 rect transform,锚点anchor,支点/轴心点 pivot
目录 1 image 图像:最简单的UI 1.1 图像的基本属性 1.2 rect transform 1.3 image的component: 精灵 → 图片 1.4 修改颜色color 1.5 修改材质 1.6 raycast target 1.7 maskable 可遮罩 1.8 imageType 1.9 native size 原生大小 2 rect transform 2.1 …...
STM32MP15-FSMP1A单片机移植Linux系统platform总线驱动
之前在该单片机下移植的Linux驱动是学习过程中,对Linux内核驱动的引导学习,接下来才是比较正常的驱动开发。 在Linux内核中,对于驱动的处理,一般会通过总线进行设备信息和设备驱动的匹配,来达到自动检测外设连接系统以…...
Java 常见的面试题(设计模式)
一、说一下你熟悉的设计模式? **设计模式:**是一套被反复使用的代码设计经验的总结(情境中一个问题经过证实的一个解决方案)。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。设计模式使人们可以更加简…...
机器学习3-聚类
1 聚类解决的问题 知识发现,发现事物之间的潜在关系异常值检测特征提取 数据压缩的例子新闻自动分组、用户分群、图像分割、像素压缩等等 2 与监督学习比较 监督学习是需要给定X、Y,X为特征,Y为标签,选择模型,学习&a…...
Qwen3.5-2B效果展示:上传PPT截图自动生成演讲备注与时间分配建议
Qwen3.5-2B效果展示:上传PPT截图自动生成演讲备注与时间分配建议 1. 模型简介 Qwen3.5-2B是一款轻量化多模态基础模型,属于Qwen3.5系列的小参数版本(20亿参数)。这款模型主打低功耗和低门槛部署,特别适配端侧和边缘设…...
leetcode 1648. 销售价值减少的颜色球-耗时99
Problem: 1648. 销售价值减少的颜色球 耗时99%,二分查找的,将整个数组看作是柱状图,然后水平线yy0平行于x轴切割柱状图,上侧的数字个数应该满足orders,但实际情况不可能,所以首先找到最符合的数字mid 最小…...
Lychee-Rerank与Node.js后端集成指南:构建高性能排序服务
Lychee-Rerank与Node.js后端集成指南:构建高性能排序服务 如果你正在用Node.js开发一个搜索或者推荐系统,是不是经常遇到这样的问题:用户搜“苹果”,结果既出现了水果,也出现了手机,甚至还有电影ÿ…...
5个BepInEx插件开发高级技巧:让你的Unity游戏模组更稳定可靠
5个BepInEx插件开发高级技巧:让你的Unity游戏模组更稳定可靠 【免费下载链接】BepInEx Unity / XNA game patcher and plugin framework 项目地址: https://gitcode.com/GitHub_Trending/be/BepInEx BepInEx是Unity游戏模组开发的终极框架,为Mono…...
MobaXterm远程连接:高效管理云端忍者像素绘卷GPU服务器
MobaXterm远程连接:高效管理云端忍者像素绘卷GPU服务器 1. 为什么选择MobaXterm管理GPU服务器 如果你正在使用星图GPU平台上的忍者像素绘卷:天界画坊服务器,那么一个趁手的远程管理工具能让你事半功倍。MobaXterm就是这样一个瑞士军刀般的工…...
如何快速部署大麦网智能抢票脚本:3个高效配置方法解决抢票难题
如何快速部署大麦网智能抢票脚本:3个高效配置方法解决抢票难题 【免费下载链接】Automatic_ticket_purchase 大麦网抢票脚本 项目地址: https://gitcode.com/GitHub_Trending/au/Automatic_ticket_purchase 大麦网智能抢票脚本是一款高效的大麦网自动化抢票工…...
如何构建高效分布式大众点评数据采集系统:5大反爬策略实战指南
如何构建高效分布式大众点评数据采集系统:5大反爬策略实战指南 【免费下载链接】dianping_spider 大众点评爬虫(全站可爬,解决动态字体加密,非OCR)。持续更新 项目地址: https://gitcode.com/gh_mirrors/di/dianping…...
Wan2.2-I2V-A14B一键部署:Python入门者图像转视频快速上手指南
Wan2.2-I2V-A14B一键部署:Python入门者图像转视频快速上手指南 1. 前言:为什么选择Wan2.2-I2V-A14B 如果你刚接触Python编程,又想体验AI图像转视频的神奇效果,Wan2.2-I2V-A14B是个不错的起点。这个模型最大的特点就是简单易用&a…...
软件指标管理化的度量定义与收集
软件指标管理化的度量定义与收集:提升质量与效率的关键 在软件开发与运维过程中,指标管理化是衡量项目健康度、优化流程和提升产品质量的核心手段。通过科学的度量定义与数据收集,团队能够量化性能、识别瓶颈并制定改进策略。无论是代码质量…...
DAMOYOLO-S模型深度解析:实时口罩检测背后的算法奥秘
DAMOYOLO-S模型深度解析:实时口罩检测背后的算法奥秘 1. 引言 在计算机视觉领域,实时目标检测一直是个热门话题。特别是在公共卫生场景中,口罩检测技术成为了智能监控系统的关键组成部分。今天我们要深入探讨的DAMOYOLO-S模型,正…...

