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

C++(20): 文件输入输出库 —— <fstream>

目录

一、 的核心功能

二、核心类及功能

三、核心操作示例

1. 文本文件写入(ofstream)

2. 文本文件读取(ifstream)

3. 二进制文件操作(fstream)

四、文件打开模式

五、文件指针操作

六、错误处理技巧

七、实际应用场景


一、<fstream> 的核心功能

  <fstream> 是 C++ 标准库中处理文件输入输出的关键组件,提供以下核心功能:

        文本/二进制文件读写、文件流状态管理、文件指针定位、多种文件打开模式控制


二、核心类及功能

类名继承关系功能描述典型用途
ofstream继承自 ostream输出文件流(写操作)创建/覆盖文件内容
ifstream继承自 istream输入文件流(读操作)读取文件内容
fstream继承自 iostream双向文件流(读写操作)同时读写文件

三、核心操作示例

1. 文本文件写入(ofstream)
#include <fstream>int main() {std::ofstream outFile("data.txt");  // 自动打开文件if (outFile) {  // 检查是否打开成功outFile << "Line 1: 文本内容\n";    // 写入字符串outFile << "Line 2: " << 42 << "\n"; // 写入混合数据outFile << 3.14 << "\n";            // 写入浮点数} else {std::cerr << "文件打开失败!";}// 文件会在对象销毁时自动关闭return 0;
}

生成文件内容:

Line 1: 文本内容
Line 2: 42
3.14


2. 文本文件读取(ifstream)
#include <fstream>
#include <iostream>int main() {std::ifstream inFile("data.txt");if (inFile.is_open()) {std::string line;while (std::getline(inFile, line)) {  // 逐行读取std::cout << "读取内容: " << line << "\n";}} else {std::cerr << "文件不存在!";}return 0;
}

输出结果:

读取内容: Line 1: 文本内容
读取内容: Line 2: 42
读取内容: 3.14

3. 二进制文件操作(fstream)
#include <fstream>
#include <iostream>struct DataPacket {int id;double value;char tag[20];
};int main() {// 写入二进制数据DataPacket data{1001, 3.1415926, "binary"};std::ofstream binOut("data.bin", std::ios::binary);binOut.write(reinterpret_cast<char*>(&data), sizeof(data));// 读取二进制数据DataPacket loaded;std::ifstream binIn("data.bin", std::ios::binary);binIn.read(reinterpret_cast<char*>(&loaded), sizeof(loaded));std::cout << "ID: " << loaded.id << "\nValue: " << loaded.value << "\nTag: " << loaded.tag;return 0;
}

输出结果:

ID: 1001
Value: 3.14159
Tag: binary

四、文件打开模式

通过位或操作符 | 组合使用多种模式:

std::fstream file("data.txt", std::ios::in |     // 可读std::ios::out |    // 可写std::ios::app |    // 追加模式std::ios::binary); // 二进制模式
模式标志功能描述
std::ios::in以读取模式打开文件
std::ios::out以写入模式打开文件
std::ios::app追加模式(不覆盖原有内容)
std::ios::ate打开时定位到文件末尾
std::ios::trunc如果文件存在则清空内容
std::ios::binary以二进制模式操作文件

五、文件指针操作

std::fstream file("data.txt", std::ios::in | std::ios::out);// 定位到第10字节处
file.seekg(10, std::ios::beg);  // 输入指针(读取位置)
file.seekp(10, std::ios::beg);  // 输出指针(写入位置)// 获取当前指针位置
std::streampos readPos = file.tellg();
std::streampos writePos = file.tellp();

六、错误处理技巧

std::ifstream file("missing.txt");// 检查文件状态
if (file.fail()) {std::cerr << "错误代码: " << errno << std::endl;
}// 重置错误状态
file.clear();

七、实际应用场景

  1. 配置文件读写:使用文本模式处理 .ini 文件

  2. 数据持久化:用二进制格式保存游戏进度

  3. 日志系统:用追加模式记录程序运行日志

  4. 大数据处理:通过文件指针随机访问大型数据文件


通过以上示例和说明,可以全面掌握 <fstream> 库的核心用法。实际开发中需注意:

  1. 二进制操作时确保数据的内存布局一致

  2. 文件路径使用绝对路径或正确相对路径

  3. 及时处理文件流的状态异常

相关文章:

C++(20): 文件输入输出库 —— <fstream>

目录 一、 的核心功能 二、核心类及功能 三、核心操作示例 1. 文本文件写入&#xff08;ofstream&#xff09; 2. 文本文件读取&#xff08;ifstream&#xff09; 3. 二进制文件操作&#xff08;fstream&#xff09; 四、文件打开模式 五、文件指针操作 六、错误处理技巧…...

05、基础入门-SpringBoot-HelloWorld

05、基础入门-SpringBoot-HelloWorld ## 一、Spring Boot 简介 **Spring Boot** 是一个用于简化 **Spring** 应用初始搭建和开发的框架&#xff0c;旨在让开发者快速启动项目并减少配置文件。 ### 主要特点 - **简化配置**&#xff1a;采用“约定优于配置”的原则&#xff0c;减…...

深入理解指针(6)

目录 1 sizeof和strlen的对⽐ 1.1 sizeof ​编辑1.2strlen 1.3 sizeof 和 strlen的对⽐ 2 数组和指针笔试题解析 2.1 ⼀维数组 ​编辑 2.2 字符数组 3 指针运算笔试题解析 3.1 题⽬1&#xff1a; ​编辑3.2 题目2 3.3 题目3 3.4 题目4 3.5 题目5 3.6 题目6 3.7…...

力扣HOT100之二叉树:108. 将有序数组转换为二叉搜索树

这道题之前做过&#xff0c;思路又给忘了&#xff0c;这道题用递归做是最简单的。 由于得到的数组是有序的&#xff0c;我们只需要取出中间位置的元素medium作为根节点&#xff0c;然后medium左边的剩余元素组成根节点的左子树&#xff0c;medium右边的剩余元素组成根节点的右子…...

手撕I2C和SPI协议实现

手撕I2C和SPI协议实现 目录 I2C协议原理I2C位操作实现I2C驱动代码编写SPI协议原理SPI位操作实现SPI驱动代码编写 I2C协议原理 I2C&#xff08;Inter-Integrated Circuit&#xff09;是一种串行通信总线&#xff0c;使用两根线&#xff1a;SCL&#xff08;时钟线&#xff09…...

452. Minimum Number of Arrows to Burst Balloons

题目描述 这道题用leetcode官方的解答反而搞复杂了。本题其实就是求重叠区间的交集。先按照区间左端点从小到大排序。然后拿出第一个区间作为【当前区间交集】的初始值。遍历后面的区间看那个区间和【当前交集】是否有重叠。如果有重叠则将【当前交集】和【当前区间】求交集并更…...

React 中,闭包陷阱

文章目录 前言1. 经典闭包陷阱示例过期状态问题 2. 解决方案2.1 正确声明依赖数组2.2 使用 useRef 捕获最新值**2.3 使用函数式更新&#xff08;针对状态更新&#xff09;****2.4 使用 useCallback 冻结闭包** **3. 异步操作中的闭包陷阱****事件监听示例** **4. 自定义 Hooks …...

代码复现5——VLMaps

项目地址 1 Setup # 拉取VLMaps仓库,成功运行后会在主目录生成文件夹vlmapsgit clone https://github.com/vlmaps/vlmaps.git#通过 conda 创建虚拟环境conda create -n vlmaps python=3.8 -yconda activate vlmaps #激活环境cd vlmaps # 切换到项目文件下bash install.ba…...

qt6 c++操作qtableview和yaml

保存qtableview数据到yaml文件从yaml文件读取数据到qtableview qtableview在UI界面拖放。 代码是问chat百度的深度探索。 - name: a1address: db1.dbw10type: int - name: a2address: db1.dbx1.0type: bool写到yaml&#xff0c;写前检查 bool plot1::isRowValid(const QStan…...

使用UniApi调用百度地图API的需要注意的地方

目录 前言 一、百度开放平台 1、功能简介 2、地点搜索服务 3、按行政区划检索API 二、Uniapi集成百度API 1、API集成流程 2、访问接口的定义 3、业务调用集成 三、可能遇到的问题 1、指定输出格式无效 2、返回数据的总数 四、总结 前言 在之前的系列博客中&#xf…...

(9)python开发经验

文章目录 1 os.path.join()拼接路径2 条件变量3 添加临时环境变量 更多精彩内容&#x1f449;内容导航 &#x1f448;&#x1f449;Qt开发 &#x1f448;&#x1f449;python开发 &#x1f448; 1 os.path.join()拼接路径 os.path.join() 是 Python 中处理文件路径拼接的核心函…...

windows 10 做服务器 其他电脑无法访问,怎么回事?

一般我们会先打开win10自己的防火墙策略&#xff0c;但是容易忽略 电脑之间 路由器上的防火墙&#xff0c;此时也需要查看一下&#xff0c;可以尝试先关闭路由器防火墙&#xff0c;如果可以了&#xff0c;再 设置路由器上的防火墙规则。 将路由器的上网设置 改成 路由模式 &a…...

mysql中limit深度分页详细剖析【爽文】

目录 一 mysql中limit深度分页 1.1 背景描述 1.2 mysql深度分页很慢原因 1.2.1 mysql的sql执行流程 1.2.2 mysql的深度分页很慢原因 1.3 解决办法 1.3.1 覆盖索引 1.3.2 子查询 1.3.3 标签查询 1.3.4 分区表 一 mysql中limit深度分页 1.1 背景描述 Limit深度分页造…...

【C++ Qt】布局管理器

每日激励&#xff1a;“不设限和自我肯定的心态&#xff1a;I can do all things。 — Stephen Curry” &#x1f914;绪论​&#xff1a; 在Qt开发中&#xff0c;界面布局的合理设计是提升用户体验的关键。早期&#xff0c;开发者常采用绝对定位的方式摆放控件&#xff0c;即通…...

Windows系统永久暂停更新操作步骤

目录 Windows系统永久暂停更新操作步骤 打开运行窗口进入注册表编辑器 导航路径图示 新建并配置DWORD值 新建值操作图示数值设置图示 在系统设置中应用暂停 暂停选项图示 注意事项 打开运行窗口 按下键盘上的 Win键 R 组合键&#xff0c;调出“运行”对话框。 进入组策略编…...

Java IO流进阶实战详解(含文件读写、拷贝、加密、字符集)

本文基于 Java 原生 IO 流&#xff0c;从最基础的字节流到字符流&#xff0c;再到实战案例&#xff08;如文件夹拷贝、文件加密等&#xff09;进行逐步深入讲解。适合有一定 Java 基础、希望掌握文件读写操作的。 一、前言 Java IO&#xff08;输入输出&#xff09;是我们日常…...

JavaScript【7】BOM模型

1.概述&#xff1a; BOM&#xff08;Browser Object Model&#xff0c;浏览器对象模型&#xff09;是 JavaScript 中的一个重要概念&#xff0c;它提供了一系列对象来访问和操作浏览器的功能和信息。与 DOM&#xff08;Document Object Model&#xff09;主要关注文档结构不同&…...

STM32F10xx 参考手册

6. 什么是寄存器 本章参考资料&#xff1a;《STM32F10xx 参考手册》、《STM32F10xx数据手册》、 学习本章时&#xff0c;配合《STM32F10xx 参考手册》“存储器和总线架构”及“通用I/O(GPIO)”章节一起阅读&#xff0c;效果会更佳&#xff0c;特别是涉及到寄存器说明的部分。…...

使用instance着色

本节我们学习使用instance着色器进行着色 //拾取var handler new Cesium.ScreenSpaceEventHandler(viewer.scene.canvas);handler.setInputAction(function(movement){console.log(movement);var pickedObject viewer.scene.pick(movement.position);if(Cesium.defined(picke…...

MySQL——4、表的约束

表的约束 1、空属性2、默认值3、列描述4、zerofill5、主键6、自增长7、唯一键8、外键9、综合案例 真正约束字段的是数据类型&#xff0c;但是数据类型约束很单一&#xff0c;需要有一些额外的约束&#xff0c;更好的保证数据的合法性&#xff0c;从业务逻辑角度保证数据的正确性…...

Datawhale PyPOTS时间序列5月第3次笔记

下游任务的两阶段(two-stage) 处理 下载数据并预处理的程序&#xff1a; # ------------------------------- # 导入必要的库 # ------------------------------- import numpy as np import torch from benchpots.datasets import preprocess_physionet2012 from pypots.imp…...

初探Reforcement Learning强化学习【QLearning/Sarsa/DQN】

文章目录 一、Q-learning现实理解&#xff1a;举例&#xff1a;回顾&#xff1a; 二、Sarsa和Q-learning的区别 三、Deep Q-NetworkDeep Q-Network是如何工作的&#xff1f;前处理&#xff1a;Convolution NetworksExperience Replay 一、Q-learning 是RL中model-free、value-…...

计算机图形学编程(使用OpenGL和C++)(第2版)学习笔记 12.曲面细分

1. 曲面细分 曲面细分着色器&#xff08;Tessellation Shader&#xff09;是OpenGL 4.0及以上版本引入的一种可编程着色器阶段&#xff0c;用于在GPU上对几何体进行细分&#xff0c;将粗糙的多边形网格自动细分为更平滑、更精细的曲面。它主要用于实现高质量的曲面渲染&#x…...

8天Python从入门到精通【itheima】-14~16

目录 第二章学习内容总体预览&#xff1a; 14节-字面量&#xff1a; 1.学习目标&#xff1a;​编辑 2.Python中6大常用数据类型&#xff1a; 3.实现&#xff1a;整数、浮点数、字符串类型的数据输出 4.字面量的定义&#xff1a; 5.小节总结 15节-注释&#xff1a; 1.le…...

Spring Boot 项目的计算机专业论文参考文献

技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;免费功能设计、开题报告、任务书、中期检查PPT、系统功能实现、代码编写、论文编写和辅导、论文…...

linux线程基础

1. 什么是线程 进程是承担系统资源分配的基本实体&#xff0c;而线程&#xff08;Thread&#xff09;是进程内的一个执行单元&#xff0c;是CPU调度的基本单位。一个进程可以包含多个线程&#xff0c;这些线程共享进程的地址空间和资源&#xff08;如文件描述符、全局变量等&a…...

进阶-数据结构部分:3、常用查找算法

飞书文档https://x509p6c8to.feishu.cn/wiki/LRdnwfhNgihKeXka7DfcGuRPnZt 顺序查找 查找算法是指&#xff1a;从一些数据之中&#xff0c;找到一个特殊的数据的实现方法。查找算法与遍历有极高的相似性&#xff0c;唯一的不同就是查找算法可能并不一定会将每一个数据都进行访…...

JavaScript 中的 for...in 和 for...of 循环详解

在 JavaScript 中&#xff0c;for...in 和 for...of 是两种常用的循环结构&#xff0c;但它们有着不同的用途和行为。很多初学者容易混淆这两者&#xff0c;本文将详细解析它们的区别、适用场景以及注意事项。 目录 for…in 循环 基本用法遍历对象属性注意事项 for…of 循环 …...

【汇总】影视仓接口地址,影视仓最新配置接口【2025.5】

&#x1f4e6; TVBOX接口分类与制作加载指南 结合参考资料&#xff0c;整理TVBOX接口的核心分类、制作方法及加载技巧&#xff0c;助你快速上手&#xff01; &#x1f310; 一、接口分类 &#x1f30d; 网络接口&#xff08;远程URL&#xff09; 特点&#xff1a;动态加载在线J…...

vue引用cesium,解决“Not allowed to load local resource”报错

vue引用cesium&#xff0c;解决“Not allowed to load local resource”报错TOC 工具 vscode node &#xff1a;v22.14.0npm &#xff1a;10.9.2vue&#xff1a;vue/cli 5.0.8 一、创建一个 Vue 3 项目 1.创建名为cesium_test的项目&#xff1a; vue create cesium_test2.…...

阿里云服务器跑模型教程

首先打开阿里云官网点击免费试用 选择250工时/月的免费仨月新人试用套餐 点击右上角主账号 选择人工智能平台PAI 然后选择交互式建模(DSW) 选择新建实例 起个名字 然后点击确定 点击打开 进入到命令行工具 下载MINIConda和对应的pytorch还有相关依赖库文件即可 然后上传…...

JavaScript入门【2】语法基础

1.JavaScript的引⼊⽅式(使用): 1.方式1:行内引用: 此种方式是将<font style"color:rgb(38,38,38);">JavaScript代码作为HTML标签的属性值使⽤,示例如下:</font><html lang"en"> <head><meta charset"UTF-8"><…...

调用DeepSeek系列模型问答时,输出只有</think>标签,而没有<think>标签

问题&#xff1a;调用DeepSeek系列模型问答时&#xff0c;输出结果缺少只有标签&#xff0c;而没有标签&#xff1f; DeepSeek官方有关说明 这里设置成这样是为了保证让模型的生成是以"<think>\n"开头的&#xff0c;然后开始思考过程&#xff0c;避免模型没…...

python:gimp 与 blender 两个软件如何协作?

GIMP&#xff08;GNU Image Manipulation Program&#xff09;和 Blender 是两个不同领域的开源工具&#xff0c;但它们在数字创作流程中常协同使用&#xff0c;以下是它们的主要联系和互补性&#xff1a; 1. 功能互补&#xff1a;2D 与 3D 的结合 GIMP 是专业的 2D 图像处理工…...

MMDetection环境安装配置

MMDetection 支持在 Linux&#xff0c;Windows 和 macOS 上运行。它需要 Python 3.7 以上&#xff0c;CUDA 9.2 以上和 PyTorch 1.8 及其以上。 MMDetection 至今也一直更新很多个版本了&#xff0c;但是对于最新的pytorch版本仍然不支持&#xff0c;我安装的时候仍然多次遇到m…...

【springboot+vue3的前后端分离项目实现支付宝的沙箱支付】

【springbootvue3的前后端分离项目实现支付宝的沙箱支付】 以下是基于SpringBoot Vue前后端分离项目实现支付宝沙箱支付的完整解决方案&#xff0c;包含关键代码和调试技巧 一、项目架构设计 二、后端实现&#xff08;SpringBoot&#xff09; 1. 添加依赖 <!-- pom.xml…...

基于Llama3的开发应用(二):大语言模型的工业部署

大语言模型的工业部署 0 前言1 ollama部署大模型1.1 ollama简介1.2 ollama的安装1.3 启动ollama服务1.4 下载模型1.5 通过API调用模型 2 vllm部署大模型2.1 vllm简介2.2 vllm的安装2.3 启动vllm模型服务2.4 API调用 3 LMDeploy部署大模型3.1 LMDeploy简介3.2 LMDeploy的安装3.3…...

MySQL只操作同一条记录也会死锁吗?

大家好&#xff0c;我是锋哥。今天分享关于【MySQL只操作同一条记录也会死锁吗?】面试题。希望对大家有帮助&#xff1b; MySQL里where条件的顺序影响索引使用吗&#xff1f; 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 在MySQL中&#xff0c;死锁通常发生在多…...

Linux的静态库 共享库 进程 主函数的参数

1、库文件 库文件 库是一组预先编译好的方法的集合&#xff1b; Linux系统储存的位置一般在/lib和/usr/lib中 库的头文件放在/usr/include 库分类&#xff1a;静态库&#xff08;libxxx.a&#xff09;共享库&#xff08;libxxx.so&#xff09; 静态库 &#xff08;1&#…...

软件设计师考试结构型设计模式考点全解析

结构型设计模式考点全解析 一、分值占比与考察趋势分析&#xff08;75分制&#xff09; 设计模式近5年平均分值考察频率趋势分析适配器模式3-5分高频保持稳定桥接模式2-3分中频略有上升组合模式4-6分高频持续重点装饰器模式3-4分高频稳定考察代理模式5-7分高频逐年增加外观模…...

Java-Objects类高效应用的全面指南

Java_Objects类高效应用的全面指南 前言一、Objects 类概述二、Objects 类的核心方法解析2.1 requireNonNull系列方法&#xff1a;空指针检查的利器2.2 equals方法&#xff1a;安全的对象比较2.3 hashCode方法&#xff1a;统一的哈希值生成2.4 toString方法&#xff1a;灵活的对…...

PostGIS实现栅格数据入库-raster2pgsql

raster2pgsql使用与最佳实践 一、工具概述 raster2pgsql是PostGIS提供的命令行工具,用于将GDAL支持的栅格格式(如GeoTIFF、JPEG、PNG等)导入PostgreSQL数据库,支持批量加载、分块切片、创建空间索引及金字塔概览,是栅格数据入库的核心工具。 二、核心功能与典型用法 1…...

专题四:综合练习(组合问题的决策树与回溯算法)

以leetode77题为例 题目分析&#xff1a; 给一个数字n&#xff0c;你可以在1到n中选k个数字进行组合&#xff0c;注意包括1和n&#xff0c;而且通过观察实例 1&#xff0c;2和2&#xff0c;1是一样的&#xff0c;所以我们画决策树的时候&#xff0c;只需要从当前位置往后列举…...

从神经架构到万物自动化的 AI 革命:解码深度学习驱动的智能自动化新范式

目录 一、深度学习与 AI 自动化概述 二、深度学习核心技术解析 2.1 常见深度学习架构 2.2 关键算法 三、AI 自动化实践案例 3.1 图像分类自动化 3.2 自然语言处理自动化 —— 文本情感分析 ​编辑 五、自动化系统设计与实现 5.1 端到端自动化框架 5.2 自动化测试框架…...

3.5/Q1,GBD数据库最新文章解读

文章题目&#xff1a;Burden, trends, projections, and spatial patterns of lip and oral cavity cancer in Iran: a time-series analysis from 1990 to 2040 DOI&#xff1a;10.1186/s12889-025-22202-8 中文标题&#xff1a;伊朗唇癌和口腔癌的负担、趋势、预测和空间模式…...

智慧校园(含实验室)智能化专项汇报方案

该方案聚焦智慧校园(含实验室)智能化建设,针对传统实验室在运营监管、环境监测、安全管控、排课考勤等方面的问题,依据《智慧校园总体框架》等标准,设计数字孪生平台、实验室综合管理平台、消安电一体化平台三大核心平台,涵盖通信、安防、建筑设备管理等设施,涉及 395 个…...

玩转 AI · 思考过程可视化

玩转 AI 思考过程可视化 我们在开发 AI 的思维链 / 处理流时&#xff0c;难免遇到耗时较长的流程&#xff0c;如果遇到处理过慢的&#xff0c;用户什么也看不到可能丧失使用兴趣&#xff0c;对于这种情况&#xff0c;一个巧妙的产品思维就是呈现处理进度。 示例 其实完成这个页…...

hysAnalyser 从MPEG-TS导出ES功能说明

摘要 hysAnalyser 是一款特色的 MPEG-TS 数据分析工具。本文主要介绍了 hysAnalyser 从MPEG-TS 中导出选定的 ES 或 PES 功能(版本v1.0.003)&#xff0c;以便用户知悉和掌握这些功能&#xff0c;帮助分析和解决各种遇到ES或PES相关的实际问题。hysAnalyser 支持主流的MP1/MP2/…...

[YOLO模型](4)YOLO V3的介绍

文章目录 YOLO V3一、模型思想二、模型性能三、改进的地方1. 三种scale2. scale变换经典方法3. 残差连接4. 核心网络架构(1) 结构(2) 输出与先验框关系 5. Logistic分类器替代Softmax 四、总结 YOLO V3 一、模型思想 作者 Redmon 又在 YOLOv2 的基础上做了一些改进&#xff1a…...

期望是什么:(无数次的均值,结合概率)21/6=3.5

https://seeing-theory.brown.edu/basic-probability/cn.html 期望是什么:(无数次的均值,结合概率)21/6=3.5 一、期望(数学概念) 在概率论和统计学中,**期望(Expectation)**是一个核心概念,用于描述随机变量的长期平均取值,反映随机变量取值的集中趋势。 (一…...