【C++ 八】写文件、读文件

news2024/9/21 19:04:51

写文件、读文件


文章目录

  • 写文件、读文件
  • 前言
    • 1 文本文件
      • 1.1 写文件
      • 1.2 读文件
    • 2 二进制文件
      • 2.1 写文件
      • 2.2 读文件


前言

本文包含文本文件写文件、文本文件读文件、二进制写文件、二进制读文件。


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

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

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

文件类型分为两种:

(1)、文本文件 - 文件以文本的 ASCII码 形式存储在计算机中

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

操作文件的三大类:

(1)、ofstream:写操作 o->output

(2)、ifstream: 读操作 i->input

(3)、fstream : 读写操作 f->file

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

#include <iostream>  // 包含标准输入输出流文件
using namespace std;  // 使用标准命名空间

// 1、包含头文件 fstream
#include <fstream>

void test01()
{
	// 2、创建流对象
	ofstream ofs;

	// 3.指定打开方式
	ofs.open("test.txt", ios::out);

	// 4、写文件
	ofs << "姓名:张三" << endl;
	ofs << "性别:男" << endl;
	ofs << "年龄:18" << endl;

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

int main() {

	test01();  // 文件创建在项目目录下

	system("pause");  // 相当于在本地 Windows 调试器中的:请按任意键继续...;暂停,方便看清楚输出结果

	return EXIT_SUCCESS;  // 程序正常退出
}

在这里插入图片描述

总结:

(1)、文件操作必须包含头文件 fstream

(2)、读文件可以利用 ofstream ,或者 fstream 类

(3)、打开文件时候需要指定操作文件的路径,以及打开方式

(4)、利用 << 可以向文件中写数据

(5)、操作完毕,要关闭文件

1.2 读文件

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

读文件步骤如下:

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

(2)、创建流对象 : ifstream ifs;

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

(4)、读数据 : 四种方式读取

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

#include <iostream>  // 包含标准输入输出流文件
using namespace std;  // 使用标准命名空间

// 1、包含头文件 fstream
#include <fstream>

void test01()
{
	// 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() {

	test01();  // 文件创建在项目目录下

	system("pause");  // 相当于在本地 Windows 调试器中的:请按任意键继续...;暂停,方便看清楚输出结果

	return EXIT_SUCCESS;  // 程序正常退出
}

在这里插入图片描述

总结:

(1)、读文件可以利用 ifstream ,或者 fstream 类

(2)、利用 is_open 函数可以判断文件是否打开成功

(3)、close 关闭文件

2 二进制文件

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

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

2.1 写文件

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

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

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

#include <iostream>  // 包含标准输入输出流文件
using namespace std;  // 使用标准命名空间

// 1、包含头文件 fstream
#include <fstream>

class Person
{
public:

	char m_Name[64];  // c++尽量少用string,用c的char写字符串,底层是c
	int m_Age;
};

//二进制文件  写文件
void test01()
{
	//2、创建输出流对象
	ofstream ofs("person.txt", ios::out | ios::binary);

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

	//4、写文件
	Person p = { "张三"  , 18 };
	ofs.write((const char*)&p, sizeof(p));  // 取p,并进行强转(const char *)

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

int main() {

	test01();  // 文件创建在项目目录下

	system("pause");  // 相当于在本地 Windows 调试器中的:请按任意键继续...;暂停,方便看清楚输出结果

	return EXIT_SUCCESS;  // 程序正常退出
}

总结:文件输出流对象 可以通过 write 函数,以二进制方式写数据

2.2 读文件

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

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

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

#include <iostream>  // 包含标准输入输出流文件
using namespace std;  // 使用标准命名空间

// 1、包含头文件 fstream
#include <fstream>

class Person
{
public:

	char m_Name[64];
	int m_Age;
};

void test01()
{
	// 2、创建流对象;3、打开文件,判断文件是否打开成功
	ifstream ifs("person.txt", ios::in | ios::binary);

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

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

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

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

int main() {

	test01();  // 文件创建在项目目录下

	system("pause");  // 相当于在本地 Windows 调试器中的:请按任意键继续...;暂停,方便看清楚输出结果

	return EXIT_SUCCESS;  // 程序正常退出
}

在这里插入图片描述

总结:文件输入流对象 可以通过 read 函数,以二进制方式读数据


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

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

相关文章

中间表示- 活性分析

进行活性分析的动机 &#xff08;1&#xff09;在代码生成的讨论中&#xff0c;我们曾假设目标机器有无限多个&#xff08;虚拟&#xff09;寄存器可用&#xff0c;这简化了代码生成的算法&#xff0c;但对物理机器是个坏消息&#xff0c;因为机器只有有限多个寄存器&#xff…

Spring Boot 应用的打包和发布

1. 创建项目&#xff08;example-fast&#xff09; 基于 Spring Boot 创建一个 WEB 项目 example-fast。 2. 编译打包 2.1 采用 IDEA 集成的 Maven 环境来对 Spring Boot 项目编译打包&#xff0c;可谓是超级 easy 2.2 mvn 命令打包 # mvn clean 清理编译 # install 打包 #…

牛顿法、梯度下降法与拟牛顿法

牛顿法、梯度下降法与拟牛顿法 0 引言1 关于泰勒展开式1.1 原理1.2 例子 2 牛顿法2.1 x 为一维2.2 x 为多维 3 梯度下降法4 拟牛顿法4.1 拟牛顿条件4.2 DFP 算法4.3 BFGS 算法4.4 L-BFGS 算法 0 引言 机器学习中在求解非线性优化问题时&#xff0c;常用的是梯度下降法和拟牛顿…

数据结构入门(C语言版)二叉树概念及结构(入门)

二叉树概念及结构&#xff08;入门&#xff09; 树的概念及结构1.树的概念及结构1.1 树的概念1.2 树的相关知识1.3 树的结构体表示1.4 树的实际运用 2.二叉树概念及结构2.1 二叉树的概念2.2 现实中的二叉树2.3 特殊的二叉树2.4 二叉树的性质2.5 二叉树的存储结构 结语 树的概念…

【SpringCloud】3、使用Nacos作为服务配置中心

1、增加 maven 依赖 <!-- SpringCloud Alibaba Nacos Config --> <dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> </dependency>2、添加配置中心配置 spr…

(数字图像处理MATLAB+Python)第四章图像正交变换-第四、五节:Radon变换和小波变换

文章目录 一&#xff1a;Radon变换&#xff08;1&#xff09;Radon变换原理&#xff08;2&#xff09;Radon变换实现&#xff08;3&#xff09;Radon变换性质&#xff08;4&#xff09;Radon变换应用 二&#xff1a;小波变换&#xff08;1&#xff09;小波A&#xff1a;定义B&a…

【PyQt】PyQt5进阶——串口上位机及实时数据显示

文章目录 0 前期教程1 前言2 串口部分——QtSerialPort3 绘图部分3.1 QCustomPlot3.2 QtChart3.3 QWT3.4 Qt Designer中如何使用 参考链接 0 前期教程 【Python】PyQt5入门 1 前言 最近在用PyQt做一个串口上位机&#xff0c;需要串口通信和实时显示曲线。这里简单记录一些关键…

【已解决】最简单便捷的方法将多html合并为pdf

一、单页面转pdf 可以使用pdf24&#xff0c;https://tools.pdf24.org/zh/webpage-to-pdf。 也可以直接打印 二、多页面转pdf&#xff08;wkhtmltopdf方案&#xff09; 1、安装配置pdfkit&#xff1a;[https://blog.csdn.net/xc_zhou/article/details/80952168(https://blog.…

Charles安装及使用教程

一. 简介及安装 一、charles的使用 1.1 charles的说明 Charles其实是一款代理服务器&#xff0c;通过过将自己设置成系统&#xff08;电脑或者浏览器&#xff09;的网络访问代理服务器&#xff0c;然后截取请求和请求结果达到分析抓包的目的。该软件是用Java写的&#xff0…

Nestjs全网最佳翻译-概况-管道-Pipes

管道 带上装饰器 Injectable() 并实现了 PipeTransform 接口的类&#xff0c;就是管道。 管道有 2 个典型的应用场景&#xff1a; 数值转换&#xff1a;将输入的参数转换成目标类型&#xff0c;例如&#xff0c;string to number。 数值校验&#xff1a;对输入的参数进行校验…

cocos creator v3.6版本使用Intersection2D模块的circleCircle方法

在cocos creator v3版本中Intersection2D模块的circleCircle方法可以用来检测两个圆形是否相交 该方法可以实现的功能有&#xff1a; cocos creator吸铁石实现、cocos creator物体在固定位置吸附、cocos creator物体吸附效果、cocos creator吸铁石实现、cocos creator两个物体时…

统计软件与数据分析Lesson9----爬虫解析库Beautiful Soup

统计软件与数据分析Lesson9----爬虫解析库Beautiful Soup知识点总结 1.requests 模块1.1 查看requests功能函数1.2 发送请求1.3 传递URL参数1.4 获取响应内容 2.Beautiful Soup模块2.1 解析器2.2 对象类型2.2.1 Beautiful Soup2.2.2 标签Tag2.2.3 可遍历的字符串NavigableStrin…

Java——包含min函数的栈

题目链接 牛客在线oj题——包含min函数的栈 题目描述 定义栈的数据结构&#xff0c;请在该类型中实现一个能够得到栈中所含最小元素的 min 函数&#xff0c;输入操作时保证 pop、top 和 min 函数操作时&#xff0c;栈中一定有元素。 此栈包含的方法有&#xff1a; push(va…

SRv6实践项目(六):控制面完成链路和主机的发现

在本次实验中&#xff0c;我们需要利用ONOS完成对数据面的控制 1.使能packet的IO功能&#xff0c;验证链路发现 main.p4提供了和P4Runtime的通信的消息的定义格式&#xff0c;分别是PacketIn和PacketOut&#xff0c;他们都被加上了一个注解&#xff0c;表示这是一个控制器交互…

c++篇---缺省参数

文章目录 一、缺省参数概念二、缺省参数实例三、缺省参数声明和定义四、全缺省和半缺省 一、缺省参数概念 缺省参数 在调用该函数时&#xff0c;如果实参没有指定传内容&#xff0c;那么在函数中用形参时&#xff0c;就采用为函数参数指定的这个缺省值 但是如果在调用该函数时…

【Qt 实现一个画板,基于QWidget,可以绘制直线和矩形】

【Qt 实现一个画板&#xff0c;基于QWidget,可以绘制直线和矩形】 简介效果展示源码mainwindow.hmainwindow.cpppainterwidget.hpainterwidget.cppshape.h &#xff08;管理&#xff09;line.hline.cpprect.hrect.cpp 结 &#x1f649;&#x1f649;更多内容 点击&#xff1a;Q…

力扣sql中等篇练习(七)

力扣sql中等篇练习(七) 1 查询活跃业务 1.1 题目内容 1.1.1 基本题目信息 1.1.2 示例输入输出 1.2 示例sql语句 # Write your MySQL query statement below # 先求出所有业务的平均发生次数 SELECT t2.business_id FROM (SELECT e.*,IF(e.occurences>t1.A_NUM,1,0) tota…

【C++】vector的简化模拟实现

文章目录 1. 主要结构2. 默认成员函数3. 迭代器4. 容量相关1. size和capacity2. reserve3. resize 5. 数据访问6. 数据修改1. push_back2.pop_back3. insert4.erase5.swap6.clear 1. 主要结构 参照SGI版本的vector实现&#xff0c;使用三个指针来维护这样一段内存空间 templa…

ACL访问控制列表简介和配置演示

一.ACL功能和特点 1.功能 2.特点 二.ACL种类 1.基础ACL&#xff1a; 2.增强ACL&#xff1a; 三.配置演示 1.基础ACL&#xff1a; 2.增强ACL&#xff1a; 一.ACL功能和特点 1.功能 对感兴趣的路由 (控制层面)进行设置策略 对感兴趣的流量 (数据层面)进行设置策略 2.…

Activity启动模式的生命周期

四种启动模式 1.standard android:launchMode"standard" 默认的标准启动模式&#xff0c;每次启动当前Activity&#xff0c;任务栈中都添加一个当前Activity的实例。按返回键时&#xff0c;表现出退出多个当前Activity的现象。 MainActivityOne和MainActivityTwo都…