C++面向对象丨4. 文件操作

news2024/11/18 5:42:18

操作系统:Windows
IDE:Visual Studio 2019

文章目录

    • 1 文本文件
      • 1.1 写文件
      • 1.2 写文件实例
      • 1.3 读文件
      • 1.4 读文件实例
    • 2 二进制文件
      • 2.1 写文件
      • 2.2 写文件实例
      • 2.2 读文件
      • 2.4 读文件实例

程序运行时产生的数据都属于临时数据,程序一旦运行结束都会被释放

通过文件可以将数据持久化

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

文件类型分为两种:

  • 文本文件:文件以文本的ASCII码形式存储在计算机中

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

操作文件的三大类:

  1. ofstream:写操作
  2. ifstream:读操作
  3. fstream :读写操作

1 文本文件

1.1 写文件

写文件步骤如下:

  1. 包含头文件
    #include <fstream>
  2. 创建流对象
    ofstream ofs;
  3. 打开文件
    ofs.open("文件路径”,打开方式);
  4. 写数据
    ofs <<"写入的数据”;
  5. 关闭文件
    ofs.close();

文件打开方式

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

注意:文件打开方式可以配合使用,利用 | 操作符

例如:用二进制方式写文件 ios :: binary | ios :: out

1.2 写文件实例

#include <iostream>
using namespace std;
#include <fstream>

void test()
{
	//1、包含头文件 fstream

	//2、创建流对象

	ofstream ofs;

	//3、指定打开方式

	ofs.open("test.txt", ios::out);

	//4、写内容

	ofs << "姓名:axyzdong" << endl;
	ofs << "性别:男" << endl;
	ofs << "年龄:18" << endl;

	//5、关闭文件

	ofs.close();
}
int main()
{
	test();

	system("pause");

	return 0;

}
  • 运行结果:在当前目录下创建了一个 test.txt 文件,且文件内包含了写入的内容。

1.3 读文件

读文件步骤如下:
1.包含头文件
#include <fstream>

2.创建流对象
ifstream ifs;

3.打开文件并判断文件是否打开成功

ifs.open(“文件路径”,打开方式):

4.读数据
四种方式读取

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

1.4 读文件实例

#include <iostream>
using namespace std;
#include <fstream>
#include <string>

void test()
{
	//1、包含头文件 fstream

	//2、创建流对象

	ifstream ifs;

	//3、打开文件 并判断是否打开成功

	ifs.open("test.txt", ios::in);

	if (!ifs.is_open())
	{
		cout << "文件打开失败" << endl;
		return;
	}

	//4、读数据
	第一种
	//char buf[1024] = { 0 };
	//while (ifs >> buf)
	//{
	//	cout << buf << endl;
	//}

	第二种
	//char buf[1024] = { 0 };
	//while (ifs.getline(buf, sizeof(buf)))
	//{
	//	cout << buf << endl;
	//}

	第三种
	//string buf;
	//while (getline(ifs,buf))
	//{
	//	cout << buf << endl;
	//}
	
	//第四种
	char c;
	while ((c = ifs.get()) != EOF) //EOF end of file
	{
		cout << c;
	}


	//5、关闭文件

	ifs.close();
}
int main()
{
	test();

	system("pause");

	return 0;

}

2 二进制文件

以二进制的方式对文件进行读写操作

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

2.1 写文件

二进制方式写文件主要利用流对象调用成员函数write

函数原型:ostream& write(const char * buffer,int len)

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

2.2 写文件实例

#include <iostream>
#include <fstream>
using namespace std;



class Person
{
public:
    char m_Name[64];
    int m_Age;
};

//二进制文件 写文件
void test01()
{
    //1、包含头文件 fstream

    //2、创建流对象

    ofstream ofs("test1.txt", ios::out | ios::binary);

    //3、打开文件
    //ofs.open("test.txt", ios::out | out::binary);

    //4、写文件
    Person p = {"axyzdong", 18};
    ofs.write((const char*)&p, sizeof(Person));

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

}

int main()
{
    test01();

	system("pause");

	return 0 ;
}
  • 运行结果:在当前目录下创建了一个 test1.txt 文件,且文件内包含了写入的内容。由于是二进制写入,可能会出现乱码情况。

文件打开后的情况:

在这里插入图片描述

2.2 读文件

二进制方式读文件主要利用流对象调用成员函数read

函数原型: istream& read(char *buffer,int len)

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

2.4 读文件实例

#include <iostream>
#include <fstream>
using namespace std;



class Person
{
public:
    char m_Name[64];
    int m_Age;
};

//二进制文件 读文件
void test02()
{
    //1、包含头文件 fstream

    //2、创建流对象

    ifstream ifs;

    //3、打开文件 判断文件是否打开成功
    ifs.open("test1.txt", ios::in | ios::binary);


    if (!ifs.is_open())
    {
       cout << "文件打开失败" << endl;
       return;
    }

    //4、写文件
    Person p;
    ifs.read((char*)&p, sizeof(Person));

    cout << "姓名:" << p.m_Name << endl;
    cout << "年龄:" << p.m_Age << endl;


    //5、关闭文件
    ifs.close();

}

int main()
{
    test02();

	system("pause");

	return 0 ;
}
  • 运行结果:

在这里插入图片描述

—— END ——

Reference

  • [1]:https://www.bilibili.com/video/BV1VJ411M7WR

如果以上内容有任何错误或者不准确的地方,欢迎在下面 👇 留言。或者你有更好的想法,欢迎一起交流学习~~~

更多精彩内容请前往 AXYZdong的博客

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

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

相关文章

计算机图形硬件(二) 5 - 1 视频显示设备

现在&#xff0c;计算机图形学的功能与应用已经得到了广泛承认&#xff0c;大量的图形硬件和软件系统已经应用到了几乎所有的领域。通用计算机甚至许多手持计算器也已经普遍具备二维及三维应用的图形功能。在个人计算机上也可以配用多种交互输人设备及图形软件包。对于高性能应…

校园网网络命令拓扑命令+详解集合

各位读者好&#xff0c;我发现&#xff0c;最近的收藏量比较多&#xff0c;为了大家方便&#xff0c;添加了一些各部分图和细节。 目录 配置总流程 1、总体拓扑图网段 2、命令 &#xff08;1&#xff09;内网配置 1&#xff09;二层交换机配置VLAN命令&#xff1a; 2&#x…

RabbitMQ学习笔记7(小滴课堂)SpringBoot2.X+SpringAMQP整合Rabbit

我们使用在线创建项目的方式&#xff1a; 这样就能快速的创建我们的项目了。 然后我们要去绑定我们的队列和交换机&#xff1a; 然后我们去写我们的测试类去测试一下&#xff1a; 我们去运行一下&#xff1a; 我们的依赖包不要引入错了。 我们可以看到我们的交换机和我们的队…

计算机基本组成和冯诺依曼机

计算机基本组成和冯诺依曼机 计算机的基本组成 计算机硬件组成 软件与硬件的逻辑等价性 冯诺依曼计算机硬件结构 冯诺依曼计算机工作原理 程序存储控制原理 计算机采用二进制的优势 高电平与低电平电压波动受影响的可能性会降低&#xff0c;抗干扰能力强 什么是冯诺依曼计算机…

基于无监督学习-关联规则的风险评估模型:更精准的预测!

一、引言 乳腺癌被认为是全球最常见的女性恶性肿瘤之一&#xff0c;对患者和公共健康造成了巨大的负担。准确评估乳腺癌风险是预防、诊断和治疗该疾病的关键。然而&#xff0c;乳腺癌风险估计面临着一些挑战&#xff0c;如数据的限制性、模型的复杂性和准确性等。因此&#xff…

JApiDocs|SpringBoot集成JApiDocs用以生成API文档

框架简介 JApiDocs和Swagger都是用于生成API文档的工具&#xff0c;它们各自有一些优点。下面是JApiDocs相较于Swagger的几个优点&#xff1a; 简单易用&#xff1a;JApiDocs相对来说更加简单易用&#xff0c;配置和使用都比较简单明了。它使用Java注解来描述API信息&#xff0…

手机兼职浪潮:揭秘在家赚钱的新机遇

科思创业汇 大家好&#xff0c;这里是科思创业汇&#xff0c;一个轻资产创业孵化平台。赚钱的方式有很多种&#xff0c;我希望在科思创业汇能够给你带来最快乐的那一种&#xff01; 如今&#xff0c;随着智能手机的普及和互联网的发展&#xff0c;手机兼职已经成为一种新的浪…

新加坡 PBM 是可编程数字货币的重要创新

一周以前我们在卢旺达开会的时候&#xff0c;新加坡 MAS 在现场发布了 Purpose Bound Money &#xff08;PBM&#xff09; 的技术白皮书。行业媒体发了几条新闻&#xff0c;然后就放过去了。实际上 PBM 代表着货币当局对于数字货币编程问题迄今为止最深度的思考&#xff0c;其白…

MySQL:聚合函数(全面详解)

聚合函数 前言一、聚合函数介绍1、AVG和SUM函数2、 MIN和MAX函数3、COUNT函数 二、GROUP BY1、基本使用2、使用多个列分组3、 GROUP BY中使用WITH ROLLUP 三、HAVING1、基本使用2、WHERE和HAVING的对比 四、 SELECT的执行过程1、查询的结构2、SELECT执行顺序3、SQL 的执行原理 …

论好名字的重要性: Linux内核page到folio的变迁

一、引子 Once upon a time&#xff0c;Netscape的大拿 Phil Karlton曾经说过&#xff1a;“There are only two hard things in Computer Science: cache invalidation and naming things”&#xff0c;成为程序界流传甚广的名言&#xff0c;可见取名是计算机科学中最难的两件…

使用SSH远程直连Docker容器

文章目录 1. 下载docker镜像2. 安装ssh服务3. 本地局域网测试4. 安装cpolar5. 配置公网访问地址6. SSH公网远程连接测试7.固定连接公网地址8. SSH固定地址连接测试 转载自cpolar极点云文章&#xff1a;SSH远程直连Docker容器 在某些特殊需求下,我们想ssh直接远程连接docker 容器…

网约车进入饱和期,如祺出行继续蓄力还能泛起多大涟漪?

如祺出行的商业版图又有了新扩张。 6月28日&#xff0c;如祺出行正式开通厦门运营&#xff0c;这是继2022年6月进入长沙后&#xff0c;如祺出行在粤港澳大湾区之外聚焦运营的第二座城市。 而在此前&#xff0c;如祺出行宣布完成8.42亿元B轮融资。据了解&#xff0c;本轮融资为…

react-native-SerialPort 串口插件使用及配置

一、git地址和环境版本 &#xff08;1&#xff09;Git地址&#xff1a;https://github.com/Marcello168/react-native-SerialPort &#xff08;2&#xff09;node版本&#xff1a;14 &#xff08;3&#xff09;react-native版本&#xff1a;0.72 二、环境配置 &#xff08;…

CentOS 安装及基本配置

文章目录 1、root 免密码输入自动登录2、设置 Terminal 计算机终端背景颜色3、关闭关闭锁屏4、You need to be root to perform this command. 1、root 免密码输入自动登录 注&#xff1a;设置免密登录需要使用超级用户权限&#xff0c;即 root 权限 &#xff08;1&#xff0…

数字IC后端学习笔记:等效性检查和ECO

1.形式验证工具 对于某些电路的移植&#xff0c;一般不需要对新电路进行仿真验证&#xff0c;而可以直接通过EDA工具来分析该电路的功能是否与原电路一致&#xff0c;此种验证方法可以大量减少验证时间&#xff0c;提高电路的效率。 等效性检查&#xff08;Equivalence Check&a…

Nuxt重构的填坑之路

我的个人网站是用vuecli写的&#xff0c;SEO不忍直视。于是用Nuxt重构了代码&#xff0c;过程中踩了无数坑&#xff0c;记录如下 一&#xff1a;body样式不生效 正常的body样式设置不能生效&#xff0c;需要在nuxt.config.js中配置 1、设置bodyAttrs的class属性&#xff0c;…

毕业论文设计题目大全(源码+论文)_kaic

1 四足步行机器人设计-机械部分 2 吸扫一体机器人外壳注塑模具设计 3 吸扫一体机器人控制系统设计设计 4 吸扫一体机器人机械结构设计 5 汽车雨刷器机械结构及控制系统软硬件电路设计 6 家庭智能防盗报警系统的设计 7 小区电气智能控制系统的设计 8 果蔬智能售卖…

第66篇:顶级APT后门Sunburst通信流量全过程复盘分析

Part1 前言 大家好&#xff0c;我是ABC_123。前面几周分享了Solarwinds供应链攻击事件的详细攻击流程及Sunburst后门的设计思路&#xff0c;但是多数朋友还是对Sunburst后门的通信过程还是没看明白。本期ABC_123就从流量的角度&#xff0c;把Sunburst后门的通信过程完整地复盘…

压缩点云数据

压缩分辨率参数 LOW_RES_ONLINE_COMPRESSION&#xff1a;低分辨率的在线压缩模式&#xff0c;不保留颜色信息。 MED_RES_ONLINE_COMPRESSION&#xff1a;中等分辨率的在线压缩模式&#xff0c;不保留颜色信息。 HIGH_RES_ONLINE_COMPRESSION&#xff1a;高分辨率的在线压缩模…

Nacos架构与原理 - Nacos-Sync

文章目录 概述官网系统模块架构同步任务管理页面注册中心管理页面使用场景 概述 NacosSync 是⼀个支持多种注册中心的同步组件,基于 Spring boot 开发框架,数据层采用Spring Data JPA &#xff0c;遵循了标准的 JPA 访问规范&#xff0c;支持多种数据源存储,默认使用Hibernate…