【黑马程序员】C++文件操作

20240220

文章目录

  • 文件操作
    • 背景
    • 文件分类
    • 操作文件的三大类
  • 文本文件
    • 写文件
      • 写文件步骤
      • 文件打开方式
      • 代码示例
    • 读文件
      • 读文件步骤
      • 代码示例
    • 写二进制文件
      • 写二进制文件步骤
      • 代码示例
    • 读二进制文件
      • 代码示例

文件操作

背景

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

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

  • C++对文件操作需要引入头文件<fstream>

文件分类

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

  • 二进制文件:文件以文本的二进制形式存储在计算机中,用户一般不可阅读

操作文件的三大类

  • ofstream:写文件

  • ifstream:读操作

  • fstream:读写文件

文本文件

写文件

写文件步骤

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

  2. 创建流对象:ofstream ofs;

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

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

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

文件打开方式

  • 文件打开方式可以配合着"|“使用,例如二进制的写使用"ios::binary|ios::out”

在这里插入图片描述

代码示例

#include <iostream>
// 1 引入头文件
#include <fstream>
using namespace std;

void test(){
    // 2 创建流对象
	ofstream ofs;
    // 3 打开文件
	ofs.open("write.txt", ios::out);
    // 4 写文件
	ofs << "hello file" << endl;
    // 5 关闭文件
	ofs.close();
}

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

读文件

读文件步骤

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

  2. 创建流对象:ifstream ifs;

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

    1. ifs.open("文件路径", 打开方式1|打开方式2);

    2. if (!ifs.is_open()){cout << "open file fail";}

  4. 读数据:四种方式读写

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

代码示例

#include <iostream>
#include <fstream>
#include <string>

using namespace std;

void test1(){
	cout << "=======方式一读========"<< endl;
	ifstream ifs;
	ifs.open("write.txt");
	if(!(ifs.is_open())){
		cout << "打开文件失败" << endl;
			return;
	}
	// 读文件1
	char buf[1024]={0};
	while(ifs>>buf){
		cout << buf<<endl;
	}
	ifs.close();
}
void test2(){
	cout << "=======方式二读========"<< endl;
	ifstream ifs;
	ifs.open("write.txt");
	if(!(ifs.is_open())){
		cout << "打开文件失败" << endl;
			return;
	}
	// 读文件2
	char buf[1024]={0};
	while(ifs.getline(buf, sizeof(buf))){
		cout << buf<<endl;
	}
	ifs.close();
}
void test3(){
	cout << "=======方式三读========"<< endl;
	ifstream ifs;
	ifs.open("write.txt");
	if(!(ifs.is_open())){
		cout << "打开文件失败" << endl;
			return;
	}
	// 读文件3
	string buf;
	while(getline(ifs, buf)){
		cout << buf<<endl;
	}
	ifs.close();
}

void test4(){
	cout << "=======方式四读========"<< endl;
	ifstream ifs;
	ifs.open("write.txt");
	if(!(ifs.is_open())){
		cout << "打开文件失败" << endl;
			return;
	}
	// 读文件4
	char c;
	while((c=ifs.get()) != EOF){
		cout << c;
	}
	ifs.close();
}
int main(){
	test1();
	test2();
	test3();
	test4();

}

写二进制文件

  • 参数原型:ofstream& write(const char* buf, int size);,参数一为写入内容的地址,参数二为写入数据的大小

写二进制文件步骤

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

  2. 创建流对象:ofstream ofs("文件路径", 打开方式1|打开方式2);,可以使用这种构造方法将创建和打开对象合并成一步进行

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

  4. 写数据:ofstream& write(const char* buf, int size);,参数一为写入内容的地址,参数二为写入数据的大小

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

代码示例

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

struct Person{
	char name[10];
	int age;
};

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

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

读二进制文件

  • 参数原型:ifstream& read(char* buf, int len);,字符指针buf指向内存中的一段存储空间,len是读写的字节数

代码示例

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

struct Person{
	char name[10];
	int age;
};

void test(){
	ifstream ifs("binary.txt", ios::in|ios::binary);
	Person p;
	ifs.read((char *)&p, sizeof(Person));
	if (!ifs.is_open()){
		cout << "打开文件出错" << endl;
		return;
	}
	cout << p.name << endl;
	cout << p.age << endl;
	ifs.close();
}

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

TypeScript(三):TypeScript面向对象

TypeScript面向对象 类的定义 与JS不同的是&#xff0c;成员属性需要在前面进行提前声明 class Person{//需要在前面对成员变量进行声明name: string//声明的时候&#xff0c;可以对值进行初始化&#xff0c;初始化可以带有类型注解&#xff0c;也可以省略age 18//construc…

基于YOLOv7算法和Widerperson数据集的高精度实时行人检测系统(PyTorch+Pyside6+YOLOv7)

摘要&#xff1a;基于YOLOv7算法和Widerperson数据集的高精度实时行人检测系统可用于日常生活中检测与定位行人目标&#xff0c;此系统可完成对输入图片、视频、文件夹以及摄像头方式的目标检测与识别&#xff0c;同时本系统还支持检测结果可视化与导出。本系统采用YOLOv7目标检…

3个密码学相关的问题

一、离散对数问题&#xff08;Discrete Logarithm Problem, DLP&#xff09; 问题描述&#xff1a;给定 有限阿贝尓群 G中的2个元素a和b&#xff0c;找出最小的正整数x满足&#xff1a;b a ^^ x &#xff08;或者证明这样的x不存在&#xff09;。 二、阶数问题&#xff08;O…

云服务器ECS价格表出炉——阿里云

2024年阿里云服务器租用价格表更新&#xff0c;云服务器ECS经济型e实例2核2G、3M固定带宽99元一年、ECS u1实例2核4G、5M固定带宽、80G ESSD Entry盘优惠价格199元一年&#xff0c;轻量应用服务器2核2G3M带宽轻量服务器一年61元、2核4G4M带宽轻量服务器一年165元12个月、2核4G服…

[element] el-upload实现 “读取本地表格内容并上传“

需求: 通过表格一键导入数据 表格模板: 导入按钮: <el-uploadref"upload"class"filter-item"style"margin-left: 10px"action"/"accept".csv, application/vnd.ms-excel, application/vnd.openxmlformats-officedocument.sp…

Open3D三维重建

原始点云&#xff1a; alpha_shape算法 import open3d as o3dpcd o3d.io.read_point_cloud("airplane_0001.pcd") mesh o3d.geometry.TriangleMesh.create_from_point_cloud_alpha_shape(pcd, alpha0.1) o3d.visualization.draw_geometries([mesh], mesh_show_b…

相机图像质量研究(39)常见问题总结:编解码对成像的影响--运动模糊

系列文章目录 相机图像质量研究(1)Camera成像流程介绍 相机图像质量研究(2)ISP专用平台调优介绍 相机图像质量研究(3)图像质量测试介绍 相机图像质量研究(4)常见问题总结&#xff1a;光学结构对成像的影响--焦距 相机图像质量研究(5)常见问题总结&#xff1a;光学结构对成…

我把ChatGPT部署到我的手机上

正常的大模型部署都是在服务器上的 但是最近我看到一个手机上可以运行的大模型 分享给大家 MiniCPM MiniCPM是基于 MLC-LLM 开发&#xff0c;将 MiniCPM 和 MiniCPM-V 在 Android 手机端上运行。 使用起来很简单&#xff0c;下载好安装包后 按照教程安装好 下载2个模型 一个是M…

C++拷贝构造函数与赋值运算符重载

顾得泉&#xff1a;个人主页 个人专栏&#xff1a;《Linux操作系统》 《C从入门到精通》 《LeedCode刷题》 键盘敲烂&#xff0c;年薪百万&#xff01; 一、拷贝构造函数 1.概念 在现实生活中&#xff0c;可能存在一个与你一样的自己&#xff0c;我们称其为双胞胎。 那在创…

虹科方案丨低负载ECU老化检测解决方案:CANCAN FD总线“一拖n”

来源&#xff1a;虹科汽车智能互联 虹科方案丨低负载ECU老化检测解决方案&#xff1a;CANCAN FD总线“一拖n” 原文链接&#xff1a;https://mp.weixin.qq.com/s/4tmhyE5hxeLFCiaeoRhlSg 欢迎关注虹科&#xff0c;为您提供最新资讯&#xff01; #汽车总线 #ECU #CAN卡 导读 …

配置Python环境及job运行的虚拟环境

1、配置Jenkins的Python环境&#xff1a;Manage Jnekins-Global Tool Configuration-Python 2、安装pyenv插件 此插件会给每个job都创建一个虚拟Python环境 安装后&#xff0c;在job config-build中选择 virtualenv builder build job的时候会自动在/opt/jenkins(node主机的…

详解平面点云面积计算

部分代码展示&#xff1a; &#xff08;1&#xff09;利用格网法计算面积&#xff1a; //&#xff08;2&#xff09;测试使用格网法计算平面点云面积 void main() {char *inputpath "D:\\testdata\\data.txt";vector<pcl::PointXYZ> points ReadPointXYZIn…

vue的十大面试题详情

1 v-show与v-if区别 v-if与v-show可以根据条件的结果,来决定是否显示指定内容&#xff1a; v-if: 条件不满足时, 元素不会存在. v-show: 条件不满足时, 元素不会显示(但仍然存在). <div id"app"><button click"show !show">点我</but…

【动态规划专栏】专题二:路径问题--------6.地下城游戏

本专栏内容为&#xff1a;算法学习专栏&#xff0c;分为优选算法专栏&#xff0c;贪心算法专栏&#xff0c;动态规划专栏以及递归&#xff0c;搜索与回溯算法专栏四部分。 通过本专栏的深入学习&#xff0c;你可以了解并掌握算法。 &#x1f493;博主csdn个人主页&#xff1a;小…

【PX4-AutoPilot教程-TIPS】Gazebo仿真环境昏暗的解决办法即Ubuntu系统安装NVIDIA显卡驱动方法

Gazebo仿真环境昏暗的解决办法即Ubuntu系统安装NVIDIA显卡驱动方法 分析原因手动安装方法&#xff08;推荐&#xff09;自动安装方法检查是否安装成功Gazebo仿真环境前后对比 分析原因 具体原因为&#xff1a;大多数情况是因为显卡性能不足&#xff0c;Gazebo自动关闭了灯光和…

线性规划求解点云最大内接圆

欢迎关注更多精彩 关注我&#xff0c;学习常用算法与数据结构&#xff0c;一题多解&#xff0c;降维打击。 本期话题&#xff1a;利用线性规划求解点云最大内接圆 参考资料&#xff1a; Tschebyscheff approximation for the calculation of maximum inscribed minimum circ…

风云温商在湖北:黄卓仁会长的商业传奇

黄卓仁,一位来自柳市的传奇人物,他的人生就像一部精彩纷呈的商业传奇,充满了挑战与机遇。他是1966年出生的优秀民营企业家,也是一位充满激情与智慧的领导者。今天,让我们一起走进黄卓仁的世界,感受他那不凡的人生历程。 首先,让我们了解一下黄卓仁的基本情况。他是温州人,出生…

[极客大挑战2019]upload

该题考点&#xff1a;后缀黑名单文件内容过滤php木马的几种书写方法 phtml可以解析php代码&#xff1b;<script language"php">eval($_POST[cmd]);</script> 犯蠢的点儿&#xff1a;利用html、php空格和php.不解析<script language"php"&…

492. Construct the Rectangle(构造矩形)

问题描述 作为一位web开发者&#xff0c; 懂得怎样去规划一个页面的尺寸是很重要的。 所以&#xff0c;现给定一个具体的矩形页面面积&#xff0c;你的任务是设计一个长度为 L 和宽度为 W 且满足以下要求的矩形的页面。要求&#xff1a; 你设计的矩形页面必须等于给定的目标面…

基于Springboot+Vue的超市管理系统源码

✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取项目下载方式&#x1f345; 一、项目背景介绍&#xff1a; 随着社会经济的发展和…