[C++核心编程](十):文件操作

目录

文件类型

文件三大类

写文本文件

读文本文件

写二进制文件

读二进制文件

文件打开方式


程序运行时产生的数据都属于临时数据,程序一旦运行结束都会被释放,因此通过文件可以将数据持久化

C++中对文件操作需要包含头文件<fstream>

文件类型

  • 文本文件      -文件以文本的ASCII码形式存储在计算机中
  • 二进制文件  -文件以文本的二进制形式存储在计算机中,用户一般不能直接读懂

文件三大类

  • ofstream:  写操作
  • ifstream:读操作
  • fstream: 读写操作

写文本文件

一般步骤:

  1. 包含头文件   #include <fstream>
  2. 创建流对象   ofstream ofs;
  3. 打开文件       ofs.open("文件路径",打开方式);
  4. 写数据           ofs << "写入的数据";
  5. 关闭文件        ofs.close();
#include <iostream>
#include <string>
#include <fstream>using namespace std;static void writeFile(void)
{ofstream ofs;ofs.open("test.txt", ios::out);ofs << "my name is zhangsan." << endl;ofs.close();
}int main(void)
{writeFile();system("pause");return 0;
}

读文本文件

一般步骤:

  1. 包含头文件   #include <fstream>
  2. 创建流对象   ifstream ifs;
  3. 打开文件       ifs.open("文件路径",打开方式);
  4. 读数据           四种读取方式
  5. 关闭文件        ifs.close();
#include <iostream>
#include <string>
#include <fstream>using namespace std;static void readFile(void)
{ifstream ifs;ifs.open("test.txt", ios::in);if (!ifs.is_open()){cout << "open error." << endl;return;}//读数据//方式1//char buf[1024] = { 0 };//while (ifs >> buf)//{//	cout << buf << endl;//}//方式2//while (ifs.getline(buf, sizeof(buf)))//{//	cout << buf << endl;//}//方式3//string buf;//while (getline(ifs, buf))//{//	cout << buf << endl;//}//方式4char c;while ((c = ifs.get()) != EOF) //EOF end of file{cout << c;}ifs.close();
}int main(void)
{readFile();system("pause");return 0;
}

写二进制文件

        打开方式指定为:ios::binary

        主要利用流对象调用成员函数: ostream& write(const char *buffer, int len);

        参数解释:字符指针buffer指向内存中一段存储地址,len是写入的字节数。

#include <iostream>
#include <string>
#include <fstream>using namespace std;class Person
{
public:char m_name[64];int m_Age;
};static void bwriteFile(void)
{ofstream ofs("person.txt", ios::binary | ios::out);Person p = { "张三", 19 };ofs.write((const char*)&p, sizeof(Person));ofs.close();}int main(void)
{bwriteFile();system("pause");return 0;
}

读二进制文件

        主要利用流对象调用成员函数: istream& read(char *buffer, int len);

        参数解释:字符指针buffer指向内存中一段存储地址,len是读写的字节数。

#include <iostream>
#include <string>
#include <fstream>using namespace std;class Person
{
public:char m_name[64];int m_Age;
};static void breadFile(void)
{ifstream ifs("person.txt", ios::binary | ios::in);if (!ifs.is_open()){cout << "open error." << endl;}Person mp = {};ifs.read((char*)&mp, sizeof(mp));cout << mp.m_name << "今年" << mp.m_Age << "岁。" << endl;ifs.close();}int main(void)
{breadFile();system("pause");return 0;
}

文件打开方式

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

注意:文件打开方式可以配合使用,利用 | 操作符,eg:[ios::binary | ios::out]

推荐阅读:[C++核心编程](九):类和对象——多态**

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/746115.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

每日shell脚本之邮件

每日shell脚本之邮件 以下是一个简单的脚本&#xff0c;它接收三个参数&#xff1a;收件人地址、邮件主题和邮件内容。这个脚本将使用系统的默认邮件服务器来发送邮件。 #!/bin/bash# 检查参数数量 if [ $# -ne 3 ]; thenecho "使用方法&#xff1a; $0 <收件人邮箱&…

工具篇--分布式定时任务springBoot--elasticjob简单使用(1)

文章目录 前言一、elasticjob 介绍&#xff1a;二、elasticjob 使用&#xff1a;2.1 部署zookeeper&#xff1a;2.2 引入库2.2 定义任务&#xff1a;2.3 任务执行&#xff1a;2.4 任务执行控制台输出&#xff1a; 三、elasticjob 启动错误&#xff1a;3.1 KeeperErrorCode Ope…

Linux系统架构----Nginx的服务优化

Linux系统架构----Nginx的服务优化 一.隐藏版本号 在生产环境中&#xff0c;需要隐藏Nginx的版本号&#xff0c;以免泄露Nginx的版本&#xff0c;使得攻击者不能针对特定版本进行攻击 查看Nginx的版本有两种方法 使用fiddler工具抓取数据包&#xff0c;查看Nginx版本 在Cen…

【Node.js从基础到高级运用】十二、身份验证与授权:JWT

身份验证与授权是现代Web应用中不可或缺的部分。了解如何在Node.js应用中实施这些机制&#xff0c;将使你能够构建更安全、更可靠的应用程序。本文将引导你通过使用JWT实现用户注册、登录和权限控制的过程。 JWT&#xff08;Json Web Token&#xff09; JWT是一种用于双方之间…

蓝桥杯深度优先搜索|剪枝|N皇后问题|路径之谜(C++)

搜索&#xff1a;暴力法算法思想的具体实现 搜索&#xff1a;通用的方法&#xff0c;一个问题如果比较难&#xff0c;那么先尝试一下搜索&#xff0c;或许能启发出更好的算法 技巧&#xff1a;竞赛时遇到不会的难题&#xff0c;用搜索提交一下&#xff0c;说不定部分判题数据很…

R语言tidycmprsk包分析竞争风险模型

竞争风险模型就是指在临床事件中出现和它竞争的结局事件&#xff0c;这是事件会导致原有结局的改变&#xff0c;因此叫做竞争风险模型。比如我们想观察患者肿瘤的复发情况&#xff0c;但是患者在观察期突然车祸死亡&#xff0c;或者因其他疾病死亡&#xff0c;这样我们就观察不…

基于单片机的太阳能热水器控制系统设计与仿真

目录 摘要 3 Controling system design and simulation of the solar water heater based on single chip microcomputer 4 第一章 前言 5 1.1设计背景和意义 5 1.2国内外的发展趋势 5 第二章 系统设计总览 7 2.1控制中心 7 2.2外围设备 7 第三章 系统硬件设计 8 3.1 总硬件的…

小程序路由跳转---事件通信通道EventChannel(二)

事件通信通道EventChannel实现两个页面之间的数据传输已在上篇小程序路由跳转—事件通信通道EventChannel&#xff08;一&#xff09;展开叙述&#xff0c;接下来讨论下多个页面&#xff08;三个及以上&#xff09;数据的通道如何构建。 本文重点&#xff1a;三个以上页面需将…

jenkin部署spring boot项目【从0到1】

写在前面&#xff0c;遇到的很多错误 本来想用docker启动Jenkins的&#xff0c;也这样做了&#xff0c;但是遇到了一个非常严重的问题&#xff0c;就是mvn命令在docker里面不生效&#xff0c;然后就修改文件&#xff0c;但是发现vi不存在&#xff0c;好的。接着用yum安装vi工具…

【Stable Diffusion】入门-02:AI绘画提示词+参数设置攻略

目录 1 提示词1.1 分类和书写方式1.1.1 内容型提示词1.1.2 标准化提示词1.1.3 通用模板 1.2 权重1.2.1 套括号1.2.2 数字权重1.2.3 进阶语法 1.3 负面提示词 2 参数详解2.1 Sampling steps2.2 Sampling method2.3 Width, Height2.4 CFG Scale2.5 Seed2.6 Batch count, Batch si…

Vue2 引入自己下载的SVG图像的方式

Vue2 引入下载的SVG图像的方式 Step 1&#xff1a;安装依赖 npm i svg-sprite-loader --saveStep 2&#xff1a;创建文件路径 // index.js import Vue from vue import SvgIcon from /components/SvgIcon// svg component// register globally Vue.component(svg-icon, Svg…

pytorch fasterrcnn-resnet50-fpn 神经网络 目标识别 应用 —— 逻辑概述

pytorch fasterrcnn-resnet50-fpn 神经网络 目标识别 应用 —— 逻辑概述 前提&#xff1a;工欲善其事必先利其器一、逻辑概述1 模型训练1) 训练数据2) 网络结构 2 推理识别 [下一章 推理识别代码讲解](https://blog.csdn.net/qq_42239488/article/details/126309847)&#xff…

《JAVA与模式》之抽象工厂模式

系列文章目录 文章目录 系列文章目录前言一、使用简单工厂模式的解决方案二、引进抽象工厂模式三、抽象工厂模式结构四、抽象工厂模式的优缺点前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看…

Hubspot 2023年推荐使用的11个AI视频生成器

视频是任何营销活动不可或缺的一部分&#xff1b;然而&#xff0c;如果你不懂编辑或时间紧迫&#xff0c;它们可能会很乏味&#xff0c;很难创建。一只手从电脑里伸出来&#xff0c;拳头碰到另一只手&#xff1b;代表AI视频生成器。 幸运的是&#xff0c;你可以利用许多人工智能…

【数据分析】数据分析介绍

专栏文章索引&#xff1a;【数据分析】专栏文章索引 目录 一、介绍 二、生活中的数据分析 1.无处不在的数据 2.为什么要进行数据分析&#xff1f; 三、数据挖掘案例 1.案例分析 一、介绍 数据采集&#xff1a;数据采集是指从不同来源收集原始数据的过程&#xff0c;包括…

【linux无root权限安装gcc8.3.0并指定自定义路径】(已解决)

【linux无root权限安装gcc8.3.0并指定自定义路径】(已解决) 本人情况:先介绍我的情况,我用的是公共服务器,并且没有root权限。我要安装某个包,但是系统的gcc版本太低,不匹配导致报错,所以我先无root安装了gcc10.1版本的,但是出现一个问题就是安装后我再去安装那个包,又…

考研失败, 学点Java打小工——Day3

1 编码规范——卫语句 表达异常分支时&#xff0c;少用if-else方式。   比如成绩判断中对于非法输入的处理&#xff1a; /*>90 <100 优秀>80 <90 良好>70 <80 一般>60 <70 及格<60 不及格*/Testpu…

Twitter广告投放技巧

明确目标受众&#xff1a; 确定你的目标受众&#xff0c;包括他们的兴趣、地理位置、年龄等。Twitter提供了广告定位选项&#xff0c;确保你的广告被展示给最相关的用户。 使用吸引人的图像和视频&#xff1a; 在Twitter上&#xff0c;图像和视频是引起关注的关键。确保你的广…

小程序开发平台源码系统:万能建站门店小程序功能 带完整的搭建教程以及代码包

在移动互联网时代&#xff0c;小程序以其独特的优势&#xff0c;迅速占领了市场的一席之地。然而&#xff0c;对于许多中小企业和个人开发者来说&#xff0c;缺乏专业的开发团队和技术支持&#xff0c;使得小程序开发成为一项难以逾越的技术门槛。小编给大家分享一款万能建站门…

linux 使用docker安装 postgres 教程,踩坑实践

linux 使用docker安装 postgres 教程 踩坑实践,安装好了不能远程访问。 防火墙已关闭、postgres 配置了允许所有ip 访问、网络是通的。端口也是开放的&#xff0c;就是不能用数据库链接工具访问。 最后发现是云服务器端口没开 ,将其打开 到这一步完全正确了&#xff0c;但是…