C++ :类和对象:文件操作

news2025/7/12 8:08:18

前言:

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

文件类型分为两种:

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

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

头文件<fstream>定义了三个类型来操作文件。

1:ofstream:写操作

2:ifstream:读操作

3:fsstream :读写操作

1:文本文件 

1.1:写 文件

写文件步骤

1:包含头文件: <fstream>

2:  创建流对象 ofstream ofs

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

4:写数据 ofs<< "写入数据";

5: 关闭文件 ofs.close()

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

void test() {
	ofstream ofs;
	// 打开文件,并写入内容
	ofs.open("text.txt", ios::out);
	ofs << "姓名:张三" << endl;
	ofs << "性别:男" << endl;
	ofs << "年龄:18" << endl;
	ofs.close();
}
int main() {
	test();
}

 

1.2 读文件 

读文件与写文件步骤相似,但是读取方式相对于比较多,读文件步骤如下

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

2:  创建流对象: ifstream ifs

3:  打开文件并判断文件是否打开成功   ifs.open("文件路径",打开方式)

4:读数据:四种读取方式

5:关闭流 ifs.close()

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

void test() {
	ofstream ofs;
	// 打开文件,并写入内容
	ofs.open("text.txt", ios::out);
	ofs << "姓名:张三" << endl;
	ofs << "性别:男" << endl;
	ofs << "年龄:18" << endl;
	ofs.close();
}

void test2(){
	// 创建文件流对象,并打开文件
	ifstream ifs;
	ifs.open("text.txt", ios::in);
	if (!ifs.is_open())
	{
		 cout<< "打开文件失败" << endl;
		return;
	}

	// 方式一: 通过 while循环一行一行的读取,利用右移运算符将数据放到buf 中
	//char buf[1024] = { 0 };
	//while (ifs >> buf)
	//{
	//	cout << buf << endl;
	//}
	//ifs.close();

	// 方式二: 通过getline指定要存放数据的buf和要读取的字节
	char buf2[1024] = { 0 };
	cout << "要读取的字节:" << sizeof(buf2)<< endl;  // 打印 1024
	int count = 0;
	// 从istream中读取至多n个字符(包含结束标记符)保存在s对应的数组中。即使还没读够n个字符,如果已经没有字符可读,则读取终止
	while (ifs.getline(buf2,sizeof(buf2)))
	{
		count++;
		cout << buf2 << endl;
	}
	cout << "读取的次数:" << count << endl;  // 打印 3
	ifs.close();

	//第三种方式
	//把所有数据放到string中,通过一个全局函数getline来读取
	//全局函数getline的第一个参数为文件流对象,第二个参数为存放数据的buf
	/*string buf3;
	while (getline(ifs, buf3))
	{
		cout << buf3 << endl;
	}*/

}
int main() {
	test2();
	return 0;
}

2: 二进制文件 

以二进制文件的方式对文件进行读写操作,打开文件的方式要指定为: ios::binary。

2.1 :写文件

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

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

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

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

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

void test() {
	ofstream ofs("person.txt", ios::out | ios::binary);
	Person p = { "张三",18 };
	ofs.write((const char*)&p, sizeof(p));
	ofs.close();
}

int main() {
	test();
}

 2.2 读文件

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

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

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

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

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

void test() {
	ifstream ifs("person.txt", ios::out | ios::binary);
	if (!ifs.is_open())
	{
		cout << "文件打开失败" << endl;
	}
	Person p;
	ifs.read((char*)&p, sizeof(p));
	ifs.close();
	cout << "姓名:" << p.m_Name << " 年龄:" << endl;
}

int main() {
	test();
}

 

 打印结果可知:可以正常读出 person.txt 文件里面内容。

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

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

相关文章

历时9个月重构iNeuOS工业互联网操作系统,打造工业领域的“Office”

目 录 1. 概述... 1 2. 整体介绍... 2 3. 主要功能简介... 5 1. 概述 历时9个月的时间&#xff0c;对iNeuOS工业互联网操作系统进行全面重构&#xff0c;发布内部测试版本。重构的主要目的&#xff1a;工程化的框架优化&#xff0c;更好的聚焦工业领…

35.前端笔记-CSS3-3D转换

1、3D的特点 进大远小物体后面遮挡不可见 x:右为正 y:下为正 z:屏幕外是正&#xff0c;往里是负 3D移动之translate transform:translateX(100px);//仅仅是x轴移动。px或百分比 transform:translateY(100px);//仅仅是y轴移动&#xff0c;px或百分比 transform:translateZ(1…

33页企业内容管理与应用建设整体解决方案

当前企业在采购管理上面临的主要问题总体应对思路利用数字化技术&#xff0c;推动企业采购管理效能与职能升级 基于互联网技术架构推出数字化采购管理平台&#xff0c;帮助企业构建采购过程与供应商管理的两大流程闭环&#xff0c;实现采购过程的在线化协同&#xff0c;进而提升…

华为云大数据BI解决方案,助力企业实现数字化转型

2022年1月12日&#xff0c;国务院印发了《“十四五”数字经济发展规划》&#xff0c;规划明确提出到2025年&#xff0c;数字经济核心产业增加值占国内生产总值比重达到10%。这一规划的出台&#xff0c;充分释放出加快发展数字经济的明确信号&#xff0c;为各行业进行数字化转型…

使用FCN实现语义分割

来源&#xff1a;投稿 作者&#xff1a;王浩 编辑&#xff1a;学姐 这篇文章的核心内容是讲解如何使用FCN实现图像的语义分割。 在文章的开始&#xff0c;我们讲了一些FCN的结构和优缺点。然后&#xff0c;讲解了如何读取数据集。接下来&#xff0c;告诉大家如何实现训练。最后…

Redis跳跃表(SkipList)

什么是跳跃表 跳跃表&#xff08;skiplist&#xff09;是一种有序且随机化的数据结构&#xff0c;它通过在每个节点中维持多个指向其他节点的指针&#xff0c;从而达到快速访问节点的目的。 跳跃表的用处 有序集合(zset)的底层可以采用数组、链表、平衡树等结果来实现, 但是他…

仪表盘读数识别检测 Python+yolov5

仪表读数识别检测利用Pythonyolov5深度学习对仪表盘刻度数进行实时识别检测读取。Python是一种由Guido van Rossum开发的通用编程语言&#xff0c;它很快就变得非常流行&#xff0c;主要是因为它的简单性和代码可读性。它使程序员能够用更少的代码行表达思想&#xff0c;而不会…

艾美捷硫代巴比妥酸反应物质 (TBARS)检测试剂盒试剂准备

艾美捷TBARS&#xff08;TCA法&#xff09;测定试剂盒提供了一种简单、可重复和标准化的工具&#xff0c;用于测定血浆、血清、尿液、组织匀浆和细胞裂解物中的脂质过氧化。在高温&#xff08;90-100C&#xff09;和酸性条件下&#xff0c;通过MDA和TBA反应形成的MDA-TBA加合物…

kali渗透测试系列---信息收集

kali 渗透测试系列 文章目录kali 渗透测试系列信息收集信息收集 信息收集阶段可以说是在整个渗透测试或者攻击很重要的阶段&#xff0c;毕竟知己知彼才能百战百胜&#xff0c;否则从目标主机使用的平台到数据库的使用再到 web 应用开发的语言等等的种类多如繁星我们一个个的尝…

Opencv(C++)笔记--直方图均衡化、直方图计算

目录 1--直方图均衡化 2--直方图计算 1--直方图均衡化 ① 简述&#xff1a; 对图片的对比度进行调整&#xff0c;输入为灰度图像&#xff0c;对亮度进行归一化处理&#xff0c;提高灰度图的对比度&#xff1b; ② Opencv API&#xff1a; cv::equalizeHist(gray, dst); ③…

Unprojecting_text_with_ellipses过程分析

文章目录一、单应性1. 图片实例2. 数学表达式二、算法思路1. 算法流程2. 透视失真具体解决方案3. 图片旋转具体解决方案4. 图片文字倾斜具体解决方案三、实际处理过程四、算法问题五、OCR识别原文链接 https://mzucker.github.io/2016/10/11/unprojecting-text-with-ellipses.h…

ListView的基本创建方式

ListView的基本创建方式 1.ListView 主要介绍了采用标签创建以及ArrayAdapter适配器以及采用继承ListActivity的方式创建列表项 1.简介 是一个列表控件&#xff0c;以列表的形式展示具体内容&#xff0c;可以给各行设置事件监听器ListView中View负责显示和更新&#xff0c;数据…

最小生成树

文章目录基本原理Kruskal算法Prim算法基本原理 连通图中的每一棵生成树&#xff0c;都是原图的一个极大无环子图&#xff0c;即&#xff1a;从其中删去任何一条边&#xff0c;生成树就不在连通&#xff1b;反之&#xff0c;在其中引入任何一条新边&#xff0c;都会形成一条回路…

二叉树9:二叉树的最大深度

主要是我自己刷题的一些记录过程。如果有错可以指出哦&#xff0c;大家一起进步。 转载代码随想录 原文链接&#xff1a; 代码随想录 leetcode链接&#xff1a; 104. 二叉树的最大深度 559.n叉树的最大深度 104.二叉树的最大深度 题目&#xff1a; 给定一个二叉树&#xff0…

校招面试真题 | 你的期望薪资是多少?为什么

很多人去面试的时候&#xff0c;就像打游戏&#xff0c;过五关斩六将&#xff0c;终于到最后一关了&#xff0c;但是谈薪资的难度堪比打游戏中搞定终级 boss 的难度&#xff0c;真的是太「南」了&#xff0c;好多人都是因为这个问题让自己五味杂陈呀。报高了怕好 offer 失之交臂…

Ubuntu: Docker安装与操作

在进行docker安装前&#xff0c;我们首先得有以下工具&#xff1a;xshell,FileZilla Client Xshell下载安装教程 FileZilla Client下载安装教程 如果你的Ubuntu是纯净的(也就是说刚下好并且刚用虚拟机装好的)&#xff0c;你得先 打开终端&#xff08;CtrlAltT&#xff09; 一…

远程连接服务器(运用密钥)连接winscp/vscode/mobaxterm

1.连接ssh 先检查自己是否登上校园VPN校园VPN导航页 (xjtu.edu.cn) sslvpn 进入cmd&#xff08;黑框框&#xff09; 输入&#xff1a; &#xff08;1&#xff09; ssh &#xff08;用户名&#xff09;&#xff08;IP名&#xff09; -p &#xff08;端口如22、2022&#x…

基于SSM框架的旅游网站的设计与实现

1 简介 今天向大家介绍一个帮助往届学生完成的毕业设计项目&#xff0c;*基于SSM框架的旅游网站的设计与实现 *。 计算机毕业生设计,课程设计需要帮助的可以找我 2 设计概要 1.1.研究背景 随着互联网技术的飞速发展&#xff0c;网络与我们的生活息息相关&#xff0c;在我们日…

汉诺塔问题的时间复杂度

一、汉诺塔问题 汉诺塔&#xff08;Tower of Hanoi&#xff09;是一个经典的递归算法问题。它描述的是有三根杆子和若干个不同大小的圆盘&#xff0c;圆盘可以按照大小顺序放在杆子上。初始时&#xff0c;所有圆盘都放在左边的杆子上&#xff0c;目标是将所有圆盘移动到右边的…

PS CS6视频剪辑基本技巧(三)添加声音和字幕

上一讲&#xff0c;介绍一下视频剪接和添加图片这两个功能。这一讲介绍添加声音和字幕&#xff0c;给上一讲剪接的视频添加一个背景音乐和解说字幕。 目录 一、添加音频 1、添加背景音乐 2、剪掉多余音乐 二、添加字幕 1、制作字幕模板 &#xff08;1&#xff09;新建背…