浅谈C++|文件篇

2023-09-17 20:43:13

C++中的文件操作是通过使用文件流来实现的。文件流提供了对文件的输入和输出功能。下面是C++文件操作的基本步骤:

1. 包含头文件:首先,包含 `<fstream>` 头文件,它包含了进行文件操作所需的类和函数。

2

. 进行文件读写操作:使用文件流对象的成员函数进行文件读写操作。例如,使用 `getline()` 函数逐行读取文本内容,使用 `<<` 运算符将数据写入文件。

5. 关闭文件:完成文件操作后,使用文件流对象的 `close()` 函数关闭文件。

以上是C++文件操作的基本流程。在实际应用中,还可以使用文件流对象的其他成员函数来操作文件指针、查询文件状态以及处理错误等。

在进行文件操作时,需要注意错误处理和异常处理。可以使用条件语句和异常处理机制来检查和处理文件操作中的错误情况。

通过掌握C++文件操作的基本步骤和注意事项,你可以读取和写入文件,实现数据的持久化和文件的处理。

. 创建文件流对象:使用文件流类的对象来表示要操作的文件。有两种常用的文件流类:`ifstream`(用于读取文件)和 `ofstream`(用于写入文件),还有一个同时支持读写的 `fstream` 类。

3. 打开文件:使用文件流对象的 `open()` 函数打开文件。在打开文件时,需要提供文件名和打开模式参数,打开模式指定了文件的读写方式(读、写、追加等)。

 引子:

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

一.基本知识: 

1.1文件类型

文件类型分为两种:
1.文本文件–文件以文本的ASCII码形式存储在计算机中。
2二进制文件·文件以文本的二进制形式存储在计算机中,用户一般不能直接读懂它们。

1.2操作文件分类 

 操作文件的三大类:

1. ifstream:读操作     io对应读写

2.ofstream:写操作

3. fstream :读写操作

1.3文件步骤

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

2.创建流对象
ofstream ofs;

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

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

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

1.4文件打开方式

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

注意:文件打开方式可以配合使用,利用|操作符例如:用二进制方式写文件ios::binary |ios: : out

 写文件代码实例:

#include <iostream>
#include <fstream>
using namespace std;
void fun() {
	//1.头文件
	//2.创建流对象
	fstream ofs;
	//3.指定打开方式
	ofs.open("test.txt", ios::out);
	//4.写内容
	ofs << "姓名:张三" << endl;
	ofs << "性别:男" << endl;
	//5.关闭文件
	ofs.close();
}
int main() {
	fun();
	return 0;
}

写文件可以用ofstream或 fstream 

读文件代码实例:

#include <iostream>
#include <fstream>
#include <string>
using namespace std;
void fun() {
	//1.头文件
	//2.创建流对象
	fstream ofs;
	//3.指定打开方式
	ofs.open("test.txt", ios::out);
	//4.写内容
	ofs << "姓名:张三" << endl;
	ofs << "性别:男" << endl;
	//5.关闭文件
	ofs.close();
}

void fun1() {
	ifstream ofs;
	ofs.open("test.txt", ios::in);
	//ofs.is_open()打开失败返回false
	if (!ofs.is_open()) {
		cout << "文件打开失败" << endl;
	}
	//读数据
	// 
	//第一种
	char buf[1024] = { 0 };
	//ofs按行输入到buf中,每次循环覆盖上一次
	while (ofs >> buf) {
		cout << buf << endl;
	}

	//第二种
	char buf1[1024] = { 0 };
	//和第一种一样,限定最大的大小
	while(ofs.getline(buf1, sizeof(buf1)) ){
		cout << buf1 << endl;
	}
	//第三种
	string buf2;
	//从ofs输入到buf2中
	while (getline(ofs, buf2)) {
		cout << buf2 << endl;
	}

	//第四种,不推荐
	char c;
	while ((c=ofs.get())!=EOF) {
		cout << c;
	}
	ofs.close();
}
int main() {
	fun();
	fun1();
	return 0;
}

总结:
·读文件可以利用ifstream ,或者ftream类

·利用is_open函数可以判断文件是否打开成功

. close关闭文件

二.二进制读取和写入

代码实例:

#include <iostream>
//1.头文件
#include <fstream>
using namespace std;
class person {
public:
	int age;
	const char *name;    //C++要加const,学到了
};

void fun() {
	//2.打开数据流(读写模式)
	fstream ofs;
	//3.打开文件
	ofs.open("erjinzhi.txt", ios::out | ios::binary);
	//4.写数据
	person p;
	p.age = 18;
	p.name = "tom";
	ofs.write((const char*)&p,sizeof(person));
	p.age = 19;
	p.name = "tony";
	ofs.write((const char*)&p, sizeof(person));
	//5.关闭文件
	ofs.close();
}

void read() {
	//2.打开数据流模式
	fstream ofs;
	//3.打开文件
	ofs.open("erjinzhi.txt", ios::in | ios::binary);
	if (!ofs.is_open()) {
		cout << "打开失败" << endl;
	}
	//4.读数据
	person p;
	ofs.read((char*)&p, sizeof(p));
	cout << p.age << endl;
	cout << p.name << endl;
	ofs.read((char*)&p, sizeof(p));
	cout << p.age << endl;
	cout << p.name << endl;
	ofs.close();
}
int main() {
	fun();  //写文件
	read();
	return 0;
}

ofs.write((const char*)&p,sizeof(person));

ofs.open("erjinzhi.txt", ios::in | ios::binary);

注意这两个函数的用法即可

更多推荐

在 Vue3 项目中如何关闭 ESLint

介绍ESLint是一个用于检查JavaScript代码质量的工具,它可以帮助开发者遵循一致的编码规范,并发现潜在的错误和问题。然而,在某些情况下,我们可能希望关闭ESLint,例如在一些小型项目中或者在特定的开发阶段。本文将介绍如何在Vue3项目中关闭ESLint。步骤第一步:找到配置文件在Vue3项目中,ESLint

Android Studio导入aosp源码

1、在Ubuntu系统下,进入源码根目录,运行如下命令:sourcebuild/envsetup.sh#初始化环境变量。lunchsdk_phone_x86_64makeidegen-j6#六核编译idegen模块忽略此命令:mmmdevelopment/tools/idegen/#此命令可以不执行(同makeideg

竞赛 基于机器视觉的行人口罩佩戴检测

简介2020新冠爆发以来,疫情牵动着全国人民的心,一线医护工作者在最前线抗击疫情的同时,我们也可以看到很多科技行业和人工智能领域的从业者,也在贡献着他们的力量。近些天来,旷视、商汤、海康、百度都多家科技公司研发出了带有AI人脸检测算法的红外测温、口罩佩戴检测等设备,依图、阿里也研发出了通过深度学习来自动诊断新冠肺炎的医

DockerCompose

DockerComposeDockerCompose可以基于Compose文件帮我们快速的部署分布式应用,而无需手动一个个创建和运行容器!初识DockerComposeCompose文件是一个文本文件,通过指令定义集群中的每个容器如何运行。格式如下:version:"3.8"services:mysql:image:m

服务器端应用的安装

前言:相信看到这篇文章的小伙伴都或多或少有一些编程基础,懂得一些linux的基本命令了吧,本篇文章将带领大家服务器如何部署一个使用django框架开发的一个网站进行云服务器端的部署。文章使用到的的工具Python:一种编程语言,只能进行后端数据的处理和管理前端HTML文件,不能用来处理HTTP请求Nginx:web服务

linux下链接

linux下链接用法ln链接格式与介绍linux下链接用法一、链接的使用格式二、链接的介绍一、链接的使用格式链接:格式:ln源文件链接文件硬链接ln-s源文件链接文件软连接硬链接文件占磁盘空间但是删除源文件不会影响硬链接文件软链接文件不占磁盘空间但是删除源文件会影响软链接文件(可以硬链接占用151字节,软链接只占用5字

docker 和k8s 入门

docker和k8s入门本文是云原生的学习记录,可以参考以下文档k8shttps://www.yuque.com/leifengyang/oncloud相关视频教程可参考如下https://www.bilibili.com/video/BV13Q4y1C7hS?p=2&vd_source=0882f549dac5404

DETR:End-to-End Object Detection with Transformers

代码:https://github.com/HuKai97/detr-annotations论文:https://arxiv.org/pdf/2005.12872.pdf参考视频:DETR论文精读【论文精读】_哔哩哔哩_bilibili团队:MetaAI摘要DETR做目标检测任务既不需要proposal,也不需要anc

《动手学深度学习 Pytorch版》 6.2 图像卷积

importtorchfromtorchimportnnfromd2limporttorchasd2l6.2.1互相关计算X=torch.tensor([[0.0,1.0,2.0],[3.0,4.0,5.0],[6.0,7.0,8.0]])K=torch.tensor([[0.0,1.0],[2.0,3.0]])此处应

kubeadm部署k8sv1.24使用cri-docker做为CRI

目的测试使用cri-docker做为containerd和docker的中间层垫片。规划IP系统主机名10.0.6.5ubuntu22.04.3jammymaster01.kktb.org10.0.6.6ubuntu22.04.3jammymaster02.kktb.org10.0.6.7ubuntu22.04.3ja

校园闲置物品交易平台的Android设计与实现

目录1引言11.1研究背景及意义11.2研究现状12相关理论及技术介绍32.1相关理论介绍32.2配置系统开发环境33总体设计53.1课题内容与功能设计53.2系统模块设计54软件分析74.1系统概要设计74.1.1系统流程图74.1.2系统整体框架图94.2系统功能设计104.2.1首页管理模块104.2.2个人中心

热文推荐