当前位置: 首页 > news >正文

C++ | 高级教程 | 文件和流

👻 概念

文件流输出使用标准库 fstream,定义三个新的数据类型:

数据类型描述
ofstream输出文件流,用于创建文件并向文件写入信息。
ifstream输入文件流,用于从文件读取信息。
fstream文件流,且同时具有 ofstreamifstream 两种功能,意味着可以创建文件,写入信息,读取信息

👻 准备工作

  • 使用文件流需要包含 <iostream><fstream> 头文件
#include <fstream>
#include <iostream>

👻 打开文件

👾语法格式

使用 open() 函数打开文件,是 fstreamifstreamofstream 对象的成员

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() 函数打开文件,是 fstreamifstreamofstream 对象的成员。

程序终止时,会自动关闭刷新所有流,释放所有分配的内存,并关闭所有打开的文件

void close();

👾示例代码

outfile.close();

👻 写入文件

👾语法格式

使用流插入运算符 << 向文件写入信息,使用的是 ofstreamfstream 对象

ofstream << data;

👻 读取文件

👾语法格式

使用流提取运算符 >> 向文件写入信息,使用的是 ifstreamfstream 对象

ifstream >> data;

👻 文件位置指针

👾语法格式

使用 istreamseekg(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++ | 高级教程 | 文件和流

&#x1f47b; 概念 文件流输出使用标准库 fstream&#xff0c;定义三个新的数据类型&#xff1a; 数据类型描述ofstream输出文件流&#xff0c;用于创建文件并向文件写入信息。ifstream输入文件流&#xff0c;用于从文件读取信息。fstream文件流&#xff0c;且同时具有 ofst…...

Starlink卫星动力学系统仿真建模第九讲-滑模(SMC)控制算法原理简介及卫星控制应用

滑模控制&#xff08;Sliding Mode Control&#xff09;算法详解 一、基本原理 滑模控制&#xff08;Sliding Mode Control, SMC&#xff09;是一种变结构控制方法&#xff0c;通过设计一个滑模面&#xff08;Sliding Surface&#xff09;&#xff0c;迫使系统状态在有限时间内…...

JVM相关面试题

1. 类加载与双亲委派机制 聊一下你对类加载器的理解。 类加载器是JVM用来加载类文件到内存的组件。它负责将字节码文件解析为java.lang.Class实例&#xff0c;并存储到运行时数据区的方法区中。类加载器分为Bootstrap ClassLoader、Extension ClassLoader和Application ClassLo…...

WiFi定位:宠物安全的“秘密武器”

从「全网寻狗」到「实时掌控」的进化史 凌晨三点收到邻居转发的「寻狗启事」&#xff0c;配图里的金毛犬项圈上赫然挂着某品牌定位器 —— 这样的魔幻场景在养宠圈并不罕见。随着宠物经济突破 3000 亿规模&#xff0c;智能定位器早已从「小众玩具」变成「刚需装备」。但你知道…...

【git】【reset全解】Git 回到上次提交并处理提交内容的不同方式

Git 回到上次提交并处理提交内容的不同方式 在 Git 中&#xff0c;若要回到上次提交并对提交内容进行不同处理&#xff0c;可使用 git reset 命令搭配不同选项来实现。以下为你详细介绍操作步骤及各选项的作用。 1. 查看提交历史 在操作之前&#xff0c;可通过以下命令查看提…...

【leetcode hot 100 11】移动零

一、暴力解法&#xff1a;两个 for 循环&#xff0c;外层循环遍历所有可能的左边界&#xff0c;内层循环遍历所有可能的右边界 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 部署实战&#xff1a;Ollama 多客户端 RAG 一、前置条件 &#xff08;一&#xff09;硬件要求 GPU&#xff1a;强烈建议使用 NVIDIA RTX 3090 或更高型号&#xff0c;显存至少 24GB。小显存跑大模型会遇到诸多问题&#xff0c;本人亲测 2080Ti 跑模型体验不佳。内…...

Linux通过设备名称如何定位故障硬盘

因为ceph集群的服务器硬盘都是直通的&#xff0c;当我们发现有硬盘存储坏道需要更换硬盘&#xff0c;但是因为盘序可能不是连续的&#xff0c;无法定位服务器上那块硬盘是故障的&#xff0c;如果冒然测试可能把正常的硬盘拔出&#xff0c;得不偿失&#xff0c;所以就写一下我定…...

大模型基础概念之神经网络宽度

在大模型中,神经网络宽度是提升模型容量的核心手段之一,与深度、数据规模共同构成性能的三大支柱。合理增加宽度可显著增强模型表达能力,但需结合正则化、硬件优化和结构设计进行平衡。未来趋势可能包括动态宽度调整、稀疏化宽度设计(如MoE)以及更高效宽度-深度复合缩放策…...

数据开发的简历及面试

简历 个人信息: 邮箱别写QQ邮箱, 写126邮箱/189邮箱等 学历>>本科及以上写,大专及以下不写 专业>>非计算机专业不写 政治面貌>>党员写, 群众不用写 掌握的技能: 精通 > 熟悉 > 了解 专业工具: 大数据相关的 公司: 如果没有可以写的>>金融服…...

数据存储:一文掌握存储数据到ElasticSearch详解

文章目录 一、Elasticsearch简介二、Python与Elasticsearch交互2.1 安装必要的库2.2 连接到Elasticsearch服务器 三、数据准备四、创建索引&#xff08;可选&#xff09;五、存储数据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.文件下载 图片示例 方式一&#xff1a;代码 方式二&#xff1a;代码 3.文件预览 图片示例 方式一&#xff1a;代码 方式二&#xff1a;代码 一、需求背景 在一个愉快的年后&#xff…...

物联网平台建设方案一

系统概述 构建物联网全域支撑服务能力&#xff0c;为实现学院涵盖物联网设备的全面感知、全域互联、全程智控、全域数字基底、全过程统筹管理奠定基础&#xff0c;为打造智能化提供坚实后台基石。 物联网平台向下接入各种传感器、终端和网关&#xff0c;向上通过开放的实施分…...

机器学习破局指南:零基础6个月系统训练计划

以下是为零基础学习者制定的「机器学习」系统学习计划&#xff08;含学习路径资源推荐&#xff09;&#xff0c;分为6个阶段&#xff0c;建议学习周期4-6个月&#xff1a; 一、基础准备阶段&#xff08;1-2周&#xff09; 目标&#xff1a;掌握必要数学工具与编程基础 数学基础…...

mmdetection框架下使用yolov3训练Seaships数据集

之前复现的yolov3算法采用的是传统的coco数据集&#xff0c;这里我需要在新的数据集上跑&#xff0c;也就是船舶检测方向的SeaShips数据集&#xff0c;这里给出教程。 Seaships论文链接&#xff1a;https://ieeexplore.ieee.org/stamp/stamp.jsp?tp&arnumber8438999 一、…...

unity学习52:UI的最基础组件 rect transform,锚点anchor,支点/轴心点 pivot

目录 1 image 图像&#xff1a;最简单的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驱动是学习过程中&#xff0c;对Linux内核驱动的引导学习&#xff0c;接下来才是比较正常的驱动开发。 在Linux内核中&#xff0c;对于驱动的处理&#xff0c;一般会通过总线进行设备信息和设备驱动的匹配&#xff0c;来达到自动检测外设连接系统以…...

Java 常见的面试题(设计模式)

一、说一下你熟悉的设计模式&#xff1f; **设计模式&#xff1a;**是一套被反复使用的代码设计经验的总结&#xff08;情境中一个问题经过证实的一个解决方案&#xff09;。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。设计模式使人们可以更加简…...

机器学习3-聚类

1 聚类解决的问题 知识发现&#xff0c;发现事物之间的潜在关系异常值检测特征提取 数据压缩的例子新闻自动分组、用户分群、图像分割、像素压缩等等 2 与监督学习比较 监督学习是需要给定X、Y&#xff0c;X为特征&#xff0c;Y为标签&#xff0c;选择模型&#xff0c;学习&a…...

Hitboxer:开源SOCD清理工具,3分钟提升游戏操作精准度

Hitboxer&#xff1a;开源SOCD清理工具&#xff0c;3分钟提升游戏操作精准度 【免费下载链接】socd Key remapper for epic gamers 项目地址: https://gitcode.com/gh_mirrors/so/socd 你是否在激烈的游戏对抗中经历过这样的挫败&#xff1a;同时按下左右方向键时角色卡…...

高性能Windows流媒体服务器部署:5大核心技术与3种实战架构深度解析

高性能Windows流媒体服务器部署&#xff1a;5大核心技术与3种实战架构深度解析 【免费下载链接】srs-windows 项目地址: https://gitcode.com/gh_mirrors/sr/srs-windows 在Windows平台上构建专业级流媒体服务系统&#xff0c;需要综合考虑协议兼容性、性能优化和部署架…...

第3篇:系统透视——信息部门如何构建“税务友好型”IT架构

本篇导读&#xff1a;如果你是信息总监或IT负责人&#xff0c;请通读全文&#xff0c;尤其是“系统合规设计的三必须”和“现场检查SOP”&#xff1b;如果你是财税人员&#xff0c;请重点阅读“研产供销全链条的系统对接要求”和“与IT部门的协作要点”&#xff1b;如果你是老板…...

在线文档协作工具选型必看:14款产品对比(2026版)

一、在线文档协作工具的概念解析及其核心功能 在线文档协作工具是基于云端的文档创建、编辑、共享与协同沟通平台&#xff0c;核心目标是让团队在同一份资料上“实时共同工作”&#xff0c;减少反复传文件、版本混乱与沟通成本。 企业常见的核心能力包括&#xff1a; 多人实…...

如何快速实现U盘文件自动备份:USBCopyer终极指南

如何快速实现U盘文件自动备份&#xff1a;USBCopyer终极指南 【免费下载链接】USBCopyer &#x1f609; 用于在插上U盘后自动按需复制该U盘的文件。”备份&偷U盘文件的神器”&#xff08;写作USBCopyer&#xff0c;读作USBCopier&#xff09; 项目地址: https://gitcode.…...

昇腾CANN elec-ops-simulation 实战:电力系统仿真——潮流计算与暂态稳定分析在 NPU 上的加速

电力系统仿真&#xff1a;500 节点电网的牛顿-拉夫逊潮流计算 → 解 10001000 稀疏雅可比矩阵&#xff08;每迭代 1 次矩阵求逆&#xff09;→ CPU 迭代 15 次 2.4s。实时调度要求 < 100ms → NPU 加速&#xff1a;雅可比矩阵求解用 Cube 单元做批量小矩阵 LU 分解 → 每迭…...

从XAI到HXAI:构建以人为中心的可解释AI框架与实践

1. 项目概述&#xff1a;从“黑箱”到“白盒”&#xff0c;构建可信AI的演进之路在机器学习项目里摸爬滚打了十几年&#xff0c;我见过太多因为模型“说不清道不明”而引发的信任危机。一个在测试集上表现完美的信用评分模型&#xff0c;可能因为无法向风控专家解释“为什么拒绝…...

Claude服务治理架构升级(生产环境零停机迁移实录)

更多请点击&#xff1a; https://codechina.net 第一章&#xff1a;Claude服务治理架构升级&#xff08;生产环境零停机迁移实录&#xff09; 为应对日益增长的推理请求量与多租户策略精细化需求&#xff0c;我们对Claude服务治理层实施了从单体API网关向云原生服务网格的平滑…...

红外信号逆向工程:破解电磁炉协议实现抽油烟机智能联动

1. 项目概述&#xff1a;当电磁炉与抽油烟机“对话”厨房里的自动化&#xff0c;听起来像是未来智能家居的专属&#xff0c;但其实很多乐趣和便利就藏在身边已有的设备里。我最近给家里的厨房换上了一台新的电磁炉&#xff0c;在翻阅说明书时&#xff0c;偶然发现了一个名为“h…...

忆阻储层计算:预处理优化与硬件实现

1. 项目概述在当今人工智能快速发展的时代&#xff0c;神经形态计算正成为突破传统冯诺依曼架构瓶颈的重要方向。储层计算&#xff08;Reservoir Computing&#xff0c;RC&#xff09;作为一种特殊的循环神经网络架构&#xff0c;因其仅需训练输出层而显著降低了计算开销&#…...