20240422,C++文件操作

news2024/9/25 5:45:59

停电一天之后,今天还有什么理由不学习呜呜……还是没怎么学习

一,文件操作

文件操作可以将数据持久化,对文件操作时须包含头文件<fstream>
两种文件类型:文本文件:文件以文本的ASCII码形式存储;二进制文件:文件以文本的二进制形式存储
操作文件三大类:ofstream 写操作;ifsream读操作, fstream读写操作

1.1 文本文件
1.1.1  写文件

包含头文件:#include <fstream>——创建流对象:ofs.open("文件路径”,打开方式);——写数据:ofs<<"写入的数据">>;——关闭文件:ofs.close();
打开方式 :
ios::in   为读文件而打开文件
ios::out   为写文件而打开文件
ios::ate   初始位置:文件尾
ios::app   追加方式写文件
ios::trunc   如果文件存在先删除,再创建
ios::binary   二进制方式

注意:|  操作符,配合使用文件打开方式,IOS::BINARY | IOS::OUT——用二进制方式写文件;未指定完整文件夹路径,默认和源文件一起?

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

void test01() {
	//创建流对象
	ofstream ofs;
	//指定打开方式    “文件路径”,打开方式
	ofs.open("test.txt", ios::out);
	//写内容
	ofs << "姓名 :张三" << endl;
	ofs << "性别:男" << endl;
	ofs << "年龄:18" << endl;
	//关文件
	ofs.close();
}
int main() {
	test01();
	system("pause");
	return 0;
}
1.1.2  读文件

包含头文件:#include <fstream>——创建流对象:ifstream ifs——打开并判断文件是否打开成功 ifs .open ("文件路径",打开方式)——读数据【四种方式读取】——关闭文件 ifs.close();

字符数组while (ifs >> buff)        字符数组while (ifs.getline(buff2, sizeof(buff2)))
字符串【这里不可以省略<string>】while (getline (ifs,buff3))     单个字符while ((c = ifs.get()) != EOF)

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

void test01() {
	ifstream ifs;
	ifs.open("test.txt", ios::in);
	if (!ifs.is_open()) {     //is_open(),bool类型,!取反
		cout << "文件打开失败" << endl;
		return;   //失败不继续进行
	}
	//读数据   第一种   输出上比其他多了一个换行符,不懂
	char buff[1024] = { 0 };//字符数组
	while (ifs >> buff) {    //文件写入BUFF,没有数据的时候循环结束
		cout << buff << endl;
	}
	
	//第二种
	//char buff2[1024] = { 0 };
	//while (ifs.getline(buff2, sizeof(buff2))) {//GETLINE获取一行,char*,首地址,count最多读几个字节数【数组大小】
	//	cout << buff2 << endl;
	//}//都不注释也只输出一次,不懂
	
	//第三种
	//string buff3;
	基础的输入流,GETLINE基础的输入流,需要输入流对象IFS,准备好的字符串
	//while (getline (ifs,buff3)) {   //未定义标识符getline?不懂
	//	cout << buff3 << endl;
	//}//失败——加上<string>头文件

	//第四种,C,不常用,效率低
	/*char c;
	while ((c = ifs.get()) != EOF) {
		cout << c;
	}*/

	ifs.close();
}
int main() {
	test01();
	system("pause");
	return 0;
}
1.2 二进制文件

打开要指定为ios::binary   

1.2.1 写文件

二进制写文件主要利用流对象调用成员函数WRITE,函数原型: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];//尽量用C的字符数组,STRING容易出现问题
	int m_Age;
};

void test01() {
	ofstream ofs;
	//打开头文件
	ofs.open("person.txt", ios::out | ios::binary);
	Person p = { "王五",78 };
	//对P取地址返回Person性质的地址,强制转换成CHAR*
	ofs.write((const char*)&p, sizeof(Person));
	ofs.close();
}
int main() {
	test01();
	system("pause");
	return 0;
}
1.2.2 读文件

二进制读文件主要利用流对象调用成员函数READ,函数原型:istream& read ( const char* buffer,int len);解释:字符指针buffer指向内存中的一段存储空间,len是读写的字节数

#include <iostream>
#include<string>
#include <fstream>
using namespace std;
class Person {
public:
	char m_Name[64];//尽量用C的字符数组,STRING容易出现问题
	int m_Age;
};

void test01() {
	ifstream ofs;
	//打开头文件
	ofs.open("person.txt", ios::in | ios::binary);
	if (!ofs.is_open()) {
		cout << "打开失败" << endl;
		return;
	}
	//读文件
	Person p;
	ofs.read((char*)&p, sizeof(Person));
	//输出数据
	cout << "姓名:" << p.m_Name << "\t年龄:" <<p.m_Age<< endl;
	ofs.close();
}
int main() {
	test01();
	system("pause");
	return 0;
}

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

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

相关文章

算法打卡day39

今日任务&#xff1a; 1&#xff09;卡码网57. 爬楼梯&#xff08;70. 爬楼梯进阶版&#xff09; 2&#xff09;322.零钱兑换 3&#xff09;279.完全平方数 4&#xff09;复习day14 卡码网57. 爬楼梯&#xff08;70. 爬楼梯进阶版&#xff09; 题目链接&#xff1a;57. 爬楼梯…

太奇怪了!99%的人没见过的Oracle故障:网络恢复后,集群的监听和vip无法启动

故障描述 15:46操作系统日志出现net4、net5网卡down&#xff0c;15:53分钟的网络恢复。网络中断是由于db汇聚交换机出现了问题。 网络恢复后&#xff0c;节点1的监听和vip无法启动。 故障分析 查看grid alert日志可以看到监听资源确实没有正常启动。 由于监听资源是crs的Ora…

Redis服务

参考文章&#xff1a; Win.dow.s上安装Redis教程 redis数据库基础篇 Redis 的安装及图形化界面 Redis DeskTop Manager 的安装与使用 下载Redis Redis压缩包 打开Redis 法1&#xff1a; 双击redis-server.exe 应用程序 法2&#xff1a; 进入redis目录下&#xff0c;打cmd…

Python安装和开发环境搭建

Python的下载 访问Python语言官网(Welcome to Python.org)进行下载相关安装包&#xff0c;根据需要和系统环境、下载相应的windows/linux/macOs安装包。 ​ 更新的还是挺快的&#xff0c;都到3.12.3了。 直接点Download哪里的Python 3.12.3。 ​ 我这边系统是64位&#xf…

Rumble Club上线时间+配置要求+游戏价格+加速器推荐

Rumble Club上线时间配置要求游戏价格加速器推荐 Rumble Club是一款基于物理的玩家大乱斗游戏&#xff0c;该作拥有丰富饱满的视觉效果和趣味性十足的游玩极致&#xff0c;让玩家可以各种富有想象力的方式&#xff0c;推搡、戏耍好友。该作即将正式上线&#xff0c;为了避免玩…

MyBatis 框架学习(I)

MyBatis 框架学习(I) 文章目录 MyBatis 框架学习(I)1. 介绍2. 准备&测试3. MyBatis 注解基础操作3.1 日志输出3.2 Insert 操作3.3 Delete 操作3.4 Update 操作3.5 Select 操作 总结 1. 介绍 之前我们学习过利用JDBC操作数据库进行项目开发&#xff0c;但我们发现它操作起来…

Mybatis多表查询和注解开发

文章目录 Mybatis多表查询套路一对一查询一对多查询 注解开发概述相关注解步骤新增主键回填 查询别名映射模糊查询 动态SQL(了解) Mybatis多表查询 套路 基于需求编写SQL语句基于SQL语句的查询结果&#xff0c;分析类与类之间关联(建立实体类和实体类的关联)在映射文件中&…

2024年51cto视频如何提取

2024年51cto视频如何提取出来&#xff0c;本文就教大家如何下载51cto网页上的视频 首先要准备以下工具 小白51cto链接&#xff1a;https://pan.baidu.com/s/1kbsK2w4rjK8VQcSSg_B0aw?pwd1234 提取码&#xff1a;1234 --来自百度网盘超级会员V10的分享 1.首先下载我给大家…

【Linux】破解工具John the Ripper和端口扫描工具NMAP

一、弱口令检测---John the Ripper 1.了解 John the Ripper John the Ripper 是一款开源的密码破解工具&#xff0c;可使用密码字典&#xff08;包含各种密码组合的列表文件&#xff09;来进行暴力破解。 一款密码分析工具&#xff0c;支持字典式的暴力破解通过对shadow文件…

数据结构系列-堆排序

&#x1f308;个人主页&#xff1a;羽晨同学 &#x1f4ab;个人格言:“成为自己未来的主人~” 昨天我们实现的堆的搭建&#xff0c;我们今天实现以下堆的排序&#xff0c; 堆的排序的最大的优点就是提高的效率&#xff0c;减小了时间复杂度&#xff0c;在这个里面我们有一个…

YoloV8改进策略:卷积改进|DOConv轻量卷积,即插即用|适用各种场景

摘要 本文使用DOConv卷积&#xff0c;替换YoloV8的常规卷积&#xff0c;轻量高效&#xff0c;即插即用&#xff01;改进方法非常简单。 DO-Conv&#xff08;Depthwise Over-parameterized Convolutional Layer&#xff09;是一种深度过参数化的卷积层&#xff0c;用于提高卷…

52 文本预处理【动手学深度学习v2】

将文本作为字符串加载到内存中。 将字符串拆分为词元&#xff08;如单词和字符&#xff09;。 建立一个词表&#xff0c;将拆分的词元映射到数字索引;将文本转换为数字索引序列&#xff0c;方便模型操作。

清华新突破,360°REA重塑多智能体系统:全方位提升复杂任务表现

引言&#xff1a;多智能体系统的新篇章——360REA框架 在多智能体系统的研究领域&#xff0c;最新的进展揭示了一种全新的框架——360REA&#xff08;Reusable Experience Accumulation with 360 Assessment&#xff09;。这一框架的提出&#xff0c;不仅是对现有系统的一次重大…

模块三——二分:704.二分查找

文章目录 前言二分查找算法简介特点学习中的侧重点算法原理模板 题目描述算法原理解法一&#xff1a;暴力解法解法二&#xff1a;二分查找算法算法流程细节问题循环结束的条件为什么是正确的&#xff1f;时间复杂度 代码实现 前言 本系列博客是逐渐深入的过程&#xff0c;建议…

函数的内容

一&#xff0c;概念 封装一份可以被重复执行的代码块&#xff0c;让大量代码重复使用 二&#xff0c;函数使用 大体分两步&#xff1a;声明函数&#xff0c;调用函数 声明函数有关键字&#xff1a;function 函数名&#xff08;&#xff09;{ 函数体 } 为基本格式&#xf…

代码随想录算法训练营第四十八天| 198.打家劫舍,213.打家劫舍II,337.打家劫舍III

题目与题解 198.打家劫舍 题目链接&#xff1a;198.打家劫舍 代码随想录题解&#xff1a;​​​​​​​198.打家劫舍 视频讲解&#xff1a;动态规划&#xff0c;偷不偷这个房间呢&#xff1f;| LeetCode&#xff1a;198.打家劫舍_哔哩哔哩_bilibili 解题思路&#xff1a; 这道…

阿里巴巴Java开发规范——编程规约(3)

# 阿里巴巴Java开发规范——编程规约&#xff08;3&#xff09; 编程规约 &#xff08;四&#xff09; OOP规约 1.【强制】构造方法里面禁止加入任何业务逻辑&#xff0c;如果有初始化逻辑&#xff0c;请放在 init 方法中 这条编程规范的目的是为了保持代码的清晰性、可读性…

非计算机专业考软考高项有必要吗?

我认为这非常重要。 看了你的介绍&#xff0c;如果你已经考取了会计证书&#xff0c;而且想要考取计算机专业的证书&#xff0c;或者你的职业规划涉及到计算机岗位&#xff0c;又或者你对计算机感兴趣&#xff0c;我建议你优先考虑软考&#xff0c;因为这个证书的含金量是有保…

问题带来多少成长,看你挖得有多深多痛

原文: 一次Redis访问超时的“捉虫”之旅 力是相互的&#xff0c;成长与痛苦也是相互的。 01-引言 最近在对一个老项目使用的docker镜像版本升级过程中碰到一个奇怪的问题&#xff0c;发现项目升级到高版本镜像后&#xff0c;访问Redis会出现很多超时错误&#xff0c;而降回之…

【数学建模】虫子追击问题(仿真)

已知 有四个虫子,分别是 A , B , C , D A,B,C,D A,B,C,D A , B , C , D A,B,C,D A,B,C,D分别在 ( 0 , 0 ) , ( 0 , 1 ) , ( 1 , 1 ) , ( 1 , 0 ) (0,0),(0,1),(1,1),(1,0) (0,0),(0,1),(1,1),(1,0)四个虫子A追B&#xff0c;B追C&#xff0c;C追D&#xff0c;D追A四个速度相同 …