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

浅谈C++|文件篇

 

 引子:

程序运行时产生的数据都属于临时数据,程序一旦运行结束都会被释放通过文件可以将数据持久化。C++中对文件操作需要包含头文件< fstream > 。

C++提供了丰富的文件操作功能,你可以使用标准库中的fstream库来进行文件的读取、写入和定位等操作。文件操作在许多应用中非常常见,例如读取配置文件、处理日志、存储数据等。

首先,你需要包含`<fstream>`头文件,然后可以创建不同类型的文件流对象,如ifstream、ofstream和fstream,它们分别用于读取、写入和读写文件。

对于文件的读取,你可以使用ifstream对象。通过调用`open()`函数并指定文件名,你可以打开一个文件进行读取操作。然后,你可以使用`>>`和其他输入操作符从文件中读取数据,或者使用`getline()`函数逐行读取文件内容。

对于文件的写入,你可以使用ofstream对象。同样,通过调用`open()`函数并指定文件名,你可以打开一个文件进行写入操作。然后,你可以使用`<<`和其他输出操作符将数据写入文件中。

除了读取和写入文件,你还可以使用fstream对象进行读写混合的文件操作。例如,你可以使用`seekg()`和`seekp()`函数定位文件指针,以便在文件中进行随机读写操作。`tellg()`和`tellp()`函数可以获取文件指针的当前位置。

在进行文件操作时,记得检查文件是否成功打开,并确保在不再需要使用文件时关闭它。你可以使用`is_open()`函数检查文件是否成功打开,使用`close()`函数关闭文件。

除了基本的文件读写操作,C++还提供了其他功能,如二进制文件的读写、文件的追加写入、文件错误处理等。你可以根据具体需求查阅C++的相关文档,深入学习和应用这些功能。

在进行文件操作时,应注意文件路径的正确性,避免发生文件找不到或无法读取的问题。此外,操作文件时要考虑文件锁定和并发访问等问题,确保线程安全性和资源的正常释放。

总之,C++的文件操作功能非常强大和灵活,使你能够轻松处理各种文件操作需求。合理运用文件操作,可以简化代码、提高效率,并为数据的存储和管理提供便利。

 

一.基本知识: 

1.1文件类型

文件类型分为两种:
1.文本文件–文件以文本的ASCII码形式存储在计算机中。
2二进制文件·文件以文本的二进制形式存储在计算机中,用户一般不能直接读懂它们。

1.2操作文件分类 

 操作文件的三大类:

1. ifstream:读操作     io对应读写

2.ofstream:写操作

3. fstream :读写操作

1.3文件步骤

1.包含头文件
#include <fstream>

2.创建流对象
ofstream ofs;

3.打开文件
ofs.open("文件路径",打开方式);

4.写数据
ofs <<"写入的数据";

5.关闭文件
ofs.close();

1.4文件打开方式

ios.in为读文件而打开文件
ios:out为写文件而打开文件
ios:.ate初始位置:文件尾
ios:.app追加方式写文件
ios::trunc如果文件存在先删除,再创建
ios::binary二进制方式

注意:文件打开方式可以配合使用,利用|操作符例如:用二进制方式写文件ios::binary |ios: : out

 写文件代码实例:

#include <iostream>
#include <fstream>
using namespace std;
void fun() {//1.头文件//2.创建流对象fstream ofs;//3.指定打开方式ofs.open("test.txt", ios::out);//4.写内容ofs << "姓名:张三" << endl;ofs << "性别:男" << endl;//5.关闭文件ofs.close();
}
int main() {fun();return 0;
}

写文件可以用ofstream或 fstream 

读文件代码实例:

#include <iostream>
#include <fstream>
#include <string>
using namespace std;
void fun() {//1.头文件//2.创建流对象fstream ofs;//3.指定打开方式ofs.open("test.txt", ios::out);//4.写内容ofs << "姓名:张三" << endl;ofs << "性别:男" << endl;//5.关闭文件ofs.close();
}void fun1() {ifstream ofs;ofs.open("test.txt", ios::in);//ofs.is_open()打开失败返回falseif (!ofs.is_open()) {cout << "文件打开失败" << endl;}//读数据// //第一种char buf[1024] = { 0 };//ofs按行输入到buf中,每次循环覆盖上一次while (ofs >> buf) {cout << buf << endl;}//第二种char buf1[1024] = { 0 };//和第一种一样,限定最大的大小while(ofs.getline(buf1, sizeof(buf1)) ){cout << buf1 << endl;}//第三种string buf2;//从ofs输入到buf2中while (getline(ofs, buf2)) {cout << buf2 << endl;}//第四种,不推荐char c;while ((c=ofs.get())!=EOF) {cout << c;}ofs.close();
}
int main() {fun();fun1();return 0;
}

总结:
·读文件可以利用ifstream ,或者ftream类

·利用is_open函数可以判断文件是否打开成功

. close关闭文件

二.二进制读取和写入

代码实例:

#include <iostream>
//1.头文件
#include <fstream>
using namespace std;
class person {
public:int age;const char *name;    //C++要加const,学到了
};void fun() {//2.打开数据流(读写模式)fstream ofs;//3.打开文件ofs.open("erjinzhi.txt", ios::out | ios::binary);//4.写数据person p;p.age = 18;p.name = "tom";ofs.write((const char*)&p,sizeof(person));p.age = 19;p.name = "tony";ofs.write((const char*)&p, sizeof(person));//5.关闭文件ofs.close();
}void read() {//2.打开数据流模式fstream ofs;//3.打开文件ofs.open("erjinzhi.txt", ios::in | ios::binary);if (!ofs.is_open()) {cout << "打开失败" << endl;}//4.读数据person p;ofs.read((char*)&p, sizeof(p));cout << p.age << endl;cout << p.name << endl;ofs.read((char*)&p, sizeof(p));cout << p.age << endl;cout << p.name << endl;ofs.close();
}
int main() {fun();  //写文件read();return 0;
}

ofs.write((const char*)&p,sizeof(person));

ofs.open("erjinzhi.txt", ios::in | ios::binary);

注意这两个函数的用法即可

相关文章:

浅谈C++|文件篇

引子&#xff1a; 程序运行时产生的数据都属于临时数据&#xff0c;程序一旦运行结束都会被释放通过文件可以将数据持久化。C中对文件操作需要包含头文件< fstream > 。 C提供了丰富的文件操作功能&#xff0c;你可以使用标准库中的fstream库来进行文件的读取、写入和定位…...

C++ QT qml 学习之 做个登录界面

最近在学习QT&#xff0c;也初探到qml 做ui 的灵活性与强大&#xff0c;于是手痒痒&#xff0c;做个demo 记录下学习成果 主要内容是如何自己编写一个按钮以及qml多窗口。 参考WX桌面版&#xff0c;做一个登录界面&#xff0c;这里面按钮是写的一个组合控件&#xff0c;有 按…...

LLM 06-大模型架构

LLM 06-大模型架构 6.1 大模型之模型概括 语言模型的一开始就可以被看做是一个黑箱&#xff0c;当前大规模语言模型的能力在于给定一个基于自身需求的prompt就可以生成符合需求的结果。形式可以表达为&#xff1a; p r o m p t ⇝ c o m p l e t i o n prompt \leadsto compl…...

openGauss学习笔记-71 openGauss 数据库管理-创建和管理普通表-删除表中数据

文章目录 openGauss学习笔记-71 openGauss 数据库管理-创建和管理普通表-删除表中数据 openGauss学习笔记-71 openGauss 数据库管理-创建和管理普通表-删除表中数据 在使用表的过程中&#xff0c;可能会需要删除已过期的数据&#xff0c;删除数据必须从表中整行的删除。 SQL不…...

【k8s】kube-proxy 工作模式

文章目录 Userspace模式&#xff1a;iptables模式&#xff1a;负载均衡&#xff08;Load Balancing&#xff09; LB轮询&#xff08;Round Robin&#xff09;&#xff1a;SessionAffinity&#xff1a;最少连接&#xff08;Least Connection&#xff09;&#xff1a;IP哈希&…...

Linux:Centos9 《下载-安装》

下载 Download (centos.org)https://www.centos.org/download/ 安装 选择第一个安装centos 根据自己需要的语言环境选择即可 这里选择要安装的磁盘&#xff0c;然后点击完成 这里选择第一个就行带有图形化 然后我们去对这两个进行设置就行 这两个地方自己进行设置就行 耐心等…...

数字化管理平台建设实践

在勘察设计行业&#xff0c;各企业加速推进数字化转型。通过管理要素数字化&#xff0c;不断优化内部组织运营效率&#xff1b;通过生产手段数字化、技术产品数字化&#xff0c;提升服务质量&#xff0c;改善客户体验&#xff1b;通过数字化营销&#xff0c;精准对接市场需求&a…...

Linux命令(80)之sort

linux命令之sort 1.sort介绍 linux命令sort用于将文本文件内容以行为单位加以排序&#xff1b;sort命令默认按每行的第一个字符排序&#xff0c;根据首字母的ASCII码值进行升序(从小到大排列)。 sort的默认分隔符是空白(空格和tab)&#xff0c;多少空白都算一个分隔符。 2.…...

[k8s] kubectl port-forward 和kubectl expose的区别

kubectl port-forward 和 kubectl expose 是 Kubernetes 命令行工具 kubectl 提供的两种不同方式来公开服务。 kubectl port-forward kubectl port-forward 命令用于在本地主机和集群内部的 Pod 之间建立一个临时的端口转发通道。 该命令将本地机器上的一个端口绑定到集群内部…...

vscode如何设置文件折叠

随着项目的不断迭代开发&#xff0c;复杂度越来越高&#xff0c;配置文件越来越多&#xff0c;导致vscode左侧文件列表展示非常不直观&#xff0c;幸好可以通过文件折叠来简化展示效果&#xff0c;把同类相关的文件折叠在一块展示&#xff0c;方便查看配置文件。配置好后的效果…...

Linux centos7 bash编程训练

训练编写一段代码&#xff0c;打印输出100之内的明7暗7&#xff0c;同时要求每5个数字打印在一行。 此项训练主要是考察for循环的使用&#xff0c;及条件判断表达式的设置和不同写法的应用。 常用的for循环有四种写法&#xff08;如打印1-100的整数&#xff09;&#xff1a; …...

k8s集群换ip

1.把/etc/kubernetes/*.conf中所有的旧ip换成新ip cd /etc/kubernetes/ find . -type f | xargs sed -i "s/$oldip/$newip/"2.替换$HOME/.kube/config文件中的旧ip为新ip(注意sudo的话需要改root下的) cd $HOME/.kube/ find . -type f | xargs sed -i "s/$old…...

选择HAL库还是标准库

选择HAL库还是标准库呢&#xff1f;HAL库是趋势&#xff0c;标准库不再升级了&#xff0c;转HAL库是大势所趋。HAL库有优点&#xff0c;也有自身的不足&#xff0c;建议初学者还是从标准库入手。 标准库是单片机开发的基本库&#xff0c;它把“用寄存器实现的功能”写成一个函…...

计算机竞赛 机器视觉的试卷批改系统 - opencv python 视觉识别

文章目录 0 简介1 项目背景2 项目目的3 系统设计3.1 目标对象3.2 系统架构3.3 软件设计方案 4 图像预处理4.1 灰度二值化4.2 形态学处理4.3 算式提取4.4 倾斜校正4.5 字符分割 5 字符识别5.1 支持向量机原理5.2 基于SVM的字符识别5.3 SVM算法实现 6 算法测试7 系统实现8 最后 0…...

Mapbox gl HTML经纬度点渲染,动态轨迹播放,自定义图形以及轨迹上显示箭头方向

Mapbox gl HTML经纬度点渲染&#xff0c;动态轨迹播放&#xff0c;自定义图形以及轨迹上显示箭头方向 1. 效果图2. 源码2.1 line.html2.2line_arrow.html 参考 今天要排查个问题&#xff0c;需要显示多个经纬度点连接成线段的方向&#xff0c;于是尝试下展示。 1. mapbox渲染经…...

kubernetes部署(kubeadmin)

文章目录 1.环境准备2. 安装dokcer3.部署cri-docker4.各个节点安装kubeadm等5.整合kubelet和cri-dockerd配置cri-dockerd配置kubelet 6.初始化集群 1.环境准备 环境和软件版本 OS : ubuntu 20.04 container runtime: docker CE 20.10.22 kubernetes 1.24.17 CRI&#xff1a;cr…...

Leetcode168. Excel表列名称

力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 题解&#xff1a; 力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 代码如下&#xff1a; class Solution {public String convertToTitle(int columnNumber) {StringBuild…...

碎片笔记 | 大模型攻防简报

前言&#xff1a;与传统的AI攻防&#xff08;后门攻击、对抗样本、投毒攻击等&#xff09;不同&#xff0c;如今的大模型攻防涉及以下多个方面的内容&#xff1a; 目录 一、大模型的可信问题1.1 虚假内容生成1.2 隐私泄露 二、大模型的安全问题2.1 模型窃取攻击2.2 数据窃取攻击…...

【100天精通Python】Day63:Python可视化_Matplotlib绘制子图,子图网格布局属性设置等示例+代码

目录 1 基本子图绘制示例 2 子图网格布局 3 调整子图的尺寸 4 多行多列的子图布局 5 子图之间的共享轴 6 绘制多个子图类型 7 实战&#xff1a; 绘制一个大图&#xff0c;里面包含6个不同类别的子图&#xff0c;不均匀布局。 绘制子图&#xff08;subplots&#xff09;…...

【Android常见问题(六)】- UX标注色值带有百分比的使用方法

这里写自定义目录标题 透明度和不透明度的转换对应色值百分比透明度标注 透明度和不透明度的转换 需要不透明度值的&#xff0c;可以自己算&#xff1a;透明度值 不透明度值 100% 如果UI给的视觉稿标注是&#xff1a;颜色#FFFFFF&#xff0c;透明度40% 。那你的计算方式应该…...

浏览器访问 AWS ECS 上部署的 Docker 容器(监听 80 端口)

✅ 一、ECS 服务配置 Dockerfile 确保监听 80 端口 EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]或 EXPOSE 80 CMD ["python3", "-m", "http.server", "80"]任务定义&#xff08;Task Definition&…...

第一篇:Agent2Agent (A2A) 协议——协作式人工智能的黎明

AI 领域的快速发展正在催生一个新时代&#xff0c;智能代理&#xff08;agents&#xff09;不再是孤立的个体&#xff0c;而是能够像一个数字团队一样协作。然而&#xff0c;当前 AI 生态系统的碎片化阻碍了这一愿景的实现&#xff0c;导致了“AI 巴别塔问题”——不同代理之间…...

Rust 异步编程

Rust 异步编程 引言 Rust 是一种系统编程语言,以其高性能、安全性以及零成本抽象而著称。在多核处理器成为主流的今天,异步编程成为了一种提高应用性能、优化资源利用的有效手段。本文将深入探讨 Rust 异步编程的核心概念、常用库以及最佳实践。 异步编程基础 什么是异步…...

【碎碎念】宝可梦 Mesh GO : 基于MESH网络的口袋妖怪 宝可梦GO游戏自组网系统

目录 游戏说明《宝可梦 Mesh GO》 —— 局域宝可梦探索Pokmon GO 类游戏核心理念应用场景Mesh 特性 宝可梦玩法融合设计游戏构想要素1. 地图探索&#xff08;基于物理空间 广播范围&#xff09;2. 野生宝可梦生成与广播3. 对战系统4. 道具与通信5. 延伸玩法 安全性设计 技术选…...

精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南

精益数据分析&#xff08;97/126&#xff09;&#xff1a;邮件营销与用户参与度的关键指标优化指南 在数字化营销时代&#xff0c;邮件列表效度、用户参与度和网站性能等指标往往决定着创业公司的增长成败。今天&#xff0c;我们将深入解析邮件打开率、网站可用性、页面参与时…...

重启Eureka集群中的节点,对已经注册的服务有什么影响

先看答案&#xff0c;如果正确地操作&#xff0c;重启Eureka集群中的节点&#xff0c;对已经注册的服务影响非常小&#xff0c;甚至可以做到无感知。 但如果操作不当&#xff0c;可能会引发短暂的服务发现问题。 下面我们从Eureka的核心工作原理来详细分析这个问题。 Eureka的…...

服务器--宝塔命令

一、宝塔面板安装命令 ⚠️ 必须使用 root 用户 或 sudo 权限执行&#xff01; sudo su - 1. CentOS 系统&#xff1a; yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh2. Ubuntu / Debian 系统…...

佰力博科技与您探讨热释电测量的几种方法

热释电的测量主要涉及热释电系数的测定&#xff0c;这是表征热释电材料性能的重要参数。热释电系数的测量方法主要包括静态法、动态法和积分电荷法。其中&#xff0c;积分电荷法最为常用&#xff0c;其原理是通过测量在电容器上积累的热释电电荷&#xff0c;从而确定热释电系数…...

Linux 内存管理实战精讲:核心原理与面试常考点全解析

Linux 内存管理实战精讲&#xff1a;核心原理与面试常考点全解析 Linux 内核内存管理是系统设计中最复杂但也最核心的模块之一。它不仅支撑着虚拟内存机制、物理内存分配、进程隔离与资源复用&#xff0c;还直接决定系统运行的性能与稳定性。无论你是嵌入式开发者、内核调试工…...

Java编程之桥接模式

定义 桥接模式&#xff08;Bridge Pattern&#xff09;属于结构型设计模式&#xff0c;它的核心意图是将抽象部分与实现部分分离&#xff0c;使它们可以独立地变化。这种模式通过组合关系来替代继承关系&#xff0c;从而降低了抽象和实现这两个可变维度之间的耦合度。 用例子…...