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…...
铭豹扩展坞 USB转网口 突然无法识别解决方法
当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…...
postgresql|数据库|只读用户的创建和删除(备忘)
CREATE USER read_only WITH PASSWORD 密码 -- 连接到xxx数据库 \c xxx -- 授予对xxx数据库的只读权限 GRANT CONNECT ON DATABASE xxx TO read_only; GRANT USAGE ON SCHEMA public TO read_only; GRANT SELECT ON ALL TABLES IN SCHEMA public TO read_only; GRANT EXECUTE O…...
Spring AI 入门:Java 开发者的生成式 AI 实践之路
一、Spring AI 简介 在人工智能技术快速迭代的今天,Spring AI 作为 Spring 生态系统的新生力量,正在成为 Java 开发者拥抱生成式 AI 的最佳选择。该框架通过模块化设计实现了与主流 AI 服务(如 OpenAI、Anthropic)的无缝对接&…...
网络编程(UDP编程)
思维导图 UDP基础编程(单播) 1.流程图 服务器:短信的接收方 创建套接字 (socket)-----------------------------------------》有手机指定网络信息-----------------------------------------------》有号码绑定套接字 (bind)--------------…...
C++八股 —— 单例模式
文章目录 1. 基本概念2. 设计要点3. 实现方式4. 详解懒汉模式 1. 基本概念 线程安全(Thread Safety) 线程安全是指在多线程环境下,某个函数、类或代码片段能够被多个线程同时调用时,仍能保证数据的一致性和逻辑的正确性…...
项目部署到Linux上时遇到的错误(Redis,MySQL,无法正确连接,地址占用问题)
Redis无法正确连接 在运行jar包时出现了这样的错误 查询得知问题核心在于Redis连接失败,具体原因是客户端发送了密码认证请求,但Redis服务器未设置密码 1.为Redis设置密码(匹配客户端配置) 步骤: 1).修…...
libfmt: 现代C++的格式化工具库介绍与酷炫功能
libfmt: 现代C的格式化工具库介绍与酷炫功能 libfmt 是一个开源的C格式化库,提供了高效、安全的文本格式化功能,是C20中引入的std::format的基础实现。它比传统的printf和iostream更安全、更灵活、性能更好。 基本介绍 主要特点 类型安全:…...
LCTF液晶可调谐滤波器在多光谱相机捕捉无人机目标检测中的作用
中达瑞和自2005年成立以来,一直在光谱成像领域深度钻研和发展,始终致力于研发高性能、高可靠性的光谱成像相机,为科研院校提供更优的产品和服务。在《低空背景下无人机目标的光谱特征研究及目标检测应用》这篇论文中提到中达瑞和 LCTF 作为多…...
二维FDTD算法仿真
二维FDTD算法仿真,并带完全匹配层,输入波形为高斯波、平面波 FDTD_二维/FDTD.zip , 6075 FDTD_二维/FDTD_31.m , 1029 FDTD_二维/FDTD_32.m , 2806 FDTD_二维/FDTD_33.m , 3782 FDTD_二维/FDTD_34.m , 4182 FDTD_二维/FDTD_35.m , 4793...
OCR MLLM Evaluation
为什么需要评测体系?——背景与矛盾 能干的事: 看清楚发票、身份证上的字(准确率>90%),速度飞快(眨眼间完成)。干不了的事: 碰到复杂表格(合并单元…...

