文件操作---C++

news2025/1/11 21:07:32

文件操作目录

  • 1.文本文件
    • 1.1写文件
    • 1.2读文件
      • 1.2.1第一种方式:流输入方式
      • 1.2.2第二种方式:getline成员函数
      • 1.2.3第三种方式:getline全局函数
      • 1.2.4第四种方式:按一个一个字符读取
  • 2.二进制文件
    • 2.1写文件
    • 2.2读文件

在这里插入图片描述

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

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

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

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

操作文件的三大类:

  1. ofstream:写操作(output)
  2. ifstream: 读操作(input)
  3. fstream : 读写操作

1.文本文件

文本文件是一种计算机文件,它是一种典型的顺序文件,其文件的逻辑结构又属于流式文件。

特别的是,文本文件是指以ASCII码方式(也称文本方式)存储的文件,更确切地说,英文、数字等字符存储的是ASCII码,而汉字存储的是机内码。文本文件中除了存储文件有效字符信息(包括能用ASCII码字符表示的回车、换行等信息)外,不能存储其他任何信息。

1.1写文件

写文件步骤如下:

  1. 包含头文件

    #include <fstream>

  2. 创建流对象

    ofstream ofs;
    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

示例:

//写文本文件
int main()
{

	//1.添加头文件:#include <fstream>
	//2.创建流对象:ofs
	ofstream ofs("test.txt", ios::out);//可将2,3步结合,系统提供构造函数

	//3.打开文件并说明以何种方式
	//ofs.open("test.txt", ios::out);

	//4.输入文本内容
	ofs << "The road is at the feet!" << endl;
	ofs << "我爱你,中国!" << endl;
	ofs << "Hello world!" << endl;

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

	system("pause");
	return 0;
}

程序所在位置及文件内容

总结:

  • 文件操作必须包含头文件 fstream
  • 读文件可以利用 ofstream ,或者fstream类
  • 打开文件时候需要指定操作文件的路径,以及打开方式
  • 利用<<可以向文件中写数据
  • 操作完毕,要关闭文件

1.2读文件

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

读文件步骤如下:

  1. 包含头文件

    #include <fstream>

  2. 创建流对象

    ifstream ifs;

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

    ifs.open(“文件路径”,打开方式);

  4. 读数据

    四种方式读取

  5. 关闭文件

    ifs.close();
    示例:

int main()
{
	//1.添加头文件:#include <fstream>
	//2.创建流对象:ifs
	ifstream ifs;

	//3.打开文件并判断文件是否打开成功
	ifs.open("test.txt", ios::in);
	if (! ifs.is_open())
	{
		cout << "文件打开失败" << endl;
		return -1;
	}

	//4.读取数据
	//四种方式见下
	
	//5.关闭文件
	ifs.close();

	system("pause");
	return 0;
}

1.2.1第一种方式:流输入方式

对于ifs<<buf流输入方式存取,其原则是当碰见空格之后,就结束当前读取,所以想要读取完文本内容,就必须借助while,当没有字符读入时结束文本读取。

//第一种方式
char buf[100] = { 0 };
//ifs<<buf;
//当创建ifstream对象后,可以像操作cin一样操作这个对象,也就是可以把ifstream的对象当做cin一样进行输入
while (ifs>>buf)
{
	cout << buf << endl;
}

在这里插入图片描述

1.2.2第二种方式:getline成员函数

ifstream的类对象ifs中含有成员函数getline函数,可以将TXT文件中的内容一行一行的读取,每次读取之后将内容存入buf中。

// 第二种方式
char buf[100] = { 0 };
while (ifs.getline(buf, sizeof(buf)))
{
	cout << buf << endl;
}

在这里插入图片描述

1.2.3第三种方式:getline全局函数

getline(ifs,string ) 有一个全局函数getline,不依赖于类对象的前提,使用时只需要将输入流ifs作为函数参数传入getline中,并且将读取的数据存入事先创建好的数组字符串变量string中。

  • 当遇到‘\n’,标志读取该行结束。
  • 当读取不到任何字符的时候就返回false,可用于判断文件是否结束
//第三种方式
string buf;
while (getline(ifs,buf))
{
	cout << buf << endl;
}

在这里插入图片描述

1.2.4第四种方式:按一个一个字符读取

get成员函数每次读取一个字符,读至文末为EOF。

// 第四种方式
char buf;
while ((buf = ifs.get()) != EOF)
{
	cout << buf ;
}

在这里插入图片描述
总结:

  • 读文件可以利用 ifstream ,或者fstream类
  • 利用is_open函数可以判断文件是否打开成功
  • close 关闭文件

2.二进制文件

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

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

2.1写文件

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

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

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

示例:

class Person
{
public:
	/*Person(string name, int age)
	{
		m_name = name;
		m_age = age;
	}*/
	//string m_name;
	
	char m_name[100];
	int m_age;
};

int main()
{
	//1.头文件
	//2.创建流对象
	//3.打开文件
	ofstream ofs("binary.txt", ios::out | ios::binary);

	//4.写文件
	//可写入自定义类型数据
	//Person p("张三",25);
	
	Person p = { "张三",25 };
	ofs.write((const char*)&p, sizeof(Person));
	
	//5.关闭文件
	ofs.close();
	
	system("pause");
	return 0;
}

总结:

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

2.2读文件

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

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

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

示例:

class Person
{
public:
	
	char m_name[100];//读取类型须与写类型一样
	int m_age;
};
int main()
{
	//1.添加头文件:#include <fstream>
	//2.创建流对象:ifs
	ifstream ifs;

	//3.打开文件并判断文件是否打开成功
	ifs.open("binary.txt", ios::in|ios::binary);
	if (!ifs.is_open())
	{
		cout << "文件打开失败" << endl;
		exit(0);//正常退出
		//exit()函数的作用是终止当前正在运行的程序。
	}

	//4.读取数据
	Person p;
	ifs.read((char*)&p, sizeof(Person));
	cout << "姓名:" << p.m_name << "  年龄:" << p.m_age << endl;
	
	//5.关闭文件
	ifs.close();

	system("pause");
	return 0;
}

在这里插入图片描述
exit函数

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

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

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

相关文章

城市建筑白模数据

数据是GIS的血液。 水经注除了可以为你提供光学卫星影像和SAR影像外&#xff0c;还可以为你提供城市建筑白模数据&#xff0c;但目前仅覆盖全国各大重点城市。 那么&#xff0c;城市建筑白模数据覆盖了哪些城市呢&#xff1f; 城市建筑白模数据分布 城市建筑白模覆盖了全国…

便捷接口调测:API 开发工具大比拼 | 开源专题 No.62

hoppscotch/hoppscotch Stars: 56.1k License: MIT Hoppscotch 是一个开源的 API 开发生态系统&#xff0c;主要功能包括发送请求和获取实时响应。该项目具有以下核心优势&#xff1a; 轻量级&#xff1a;采用简约的 UI 设计。快速&#xff1a;实时发送请求并获得响应。支持多…

机器学习_集成学习之偏差和方差

文章目录 介绍偏差和方差——机器学习性能优化的风向标目标&#xff1a;降低偏差与方差数据集大小对偏差和方差的影响预测空间的变化带来偏差和方差的变化 介绍 集成学习&#xff0c;就是机器学习里面的协同作战。 如果训练出一个模型比较弱&#xff0c;又训练出一个模型还是…

【LIBS】交叉编译TCPDUMP

目录 1. 安装编译工具2. 设置环境变量3. 编译libpcap3.1 安装依赖3.2 交叉编译 4. 编译TCPDUMP4.1 克隆仓库与生成构建环境4.2 静态链接LIBPCAP4.3 动态链接LIBPCAP4.4 构建与安装 5. 查看交叉编译结果5.1 文件布局 1. 安装编译工具 sudo apt-get install -y autoconf automak…

【云原生】Docker如何构建镜像

目录 前言 一、基于已有的镜像创建 步骤一&#xff1a;先基于现有的镜像创建一个容器&#xff0c;然后进入容器去完成修改 步骤二&#xff1a;将该容器作为一个模板提交创建为一个新的镜像 步骤三&#xff1a;基于新的镜像&#xff0c;docker run创建一个容器&#xff0c;进…

2024年PMP备考学习资料整合汇总!!

你是否也有过类似的经历&#xff1f; 为了获取备考资料&#xff0c;有的同学在论坛、知乎或者相关垂直类网站下载了很多的资料&#xff0c;这些资料大部分是机构进行获客引流的资料&#xff0c;没有真正的干货。 经常会看到10G、20G的资料包&#xff0c;感觉内容很丰富&#xf…

当项目遭遇资源冲突时,如何巧妙化解?

在项目管理中&#xff0c;资源冲突是一个常见且棘手的问题。当多个项目争夺有限的资源时&#xff0c;如何妥善分配并确保项目顺利进行&#xff0c;成为每个项目经理必须面对的挑战。今天&#xff0c;我们就来探讨几个实用的行动方案&#xff0c;帮助你化解资源冲突&#xff0c;…

Git笔记:常用使用Git命令+使用Git关联本地仓库和远程仓库操作步骤

Git 分布式版本控制系统 常用Git命令 创建一个管理代码的文件目录右键Git Bath打开完成配置信息&#xff0c;输入个人用户名、邮件信息 git config --global user.name 用户名 git config --global user.email 邮箱地址初始化仓库 git init: 初始化仓库 文件目录里会出现一个…

Spring5学习笔记

Spring5 框架概述IOC(Inversion Of Control)IOC基本过程:IOC接口(BeanFactory)IOC接口实现类IOC操作Bean管理一、什么是Bean管理?二、什么是DI?三、Bean管理的两种实现方式1.基于XML配置文件方式实现基于XML方式创建对象基于XML方式注入属性常规属性注入特殊属性值的注入…

Windows中Zookeeper与kafka的安装配置

一、Zookeeper安装与使用 1.安装包下载 直接在官网下载即可Apache ZooKeeper。 下载后直接解压到本地即可。 2.环境配置 1> 在目录中下增加data和log文件夹 2> 解压目录下的 conf 目录&#xff0c;将目录中的 zoo_sample.cfg 文件&#xff0c;复制一份&#xff0c;重…

element el-date-picker type=“datetimerange“

刚写完结果需求变更了。封装的时间组件重新做。结合eacharts 。 直接上代码了 日期选择组件封装 <template><section class"warning-container"><header class"query-head"><el-form :inline"true" class"query-form…

IP被封怎么办?如何绕过IP禁令?

相信很多人遇到过IP禁令&#xff1a;比如你在访问社交媒体、搜索引擎或电子商务网站时会被限制访问&#xff0c;又或者你的的账号莫名被封&#xff0c;这些由于网络上的种种限制我们经常会遭遇IP被封的情况&#xff0c;导致无法使用继续进行网络行动。在本文中&#xff0c;我们…

nvm安装nodejs报错解决

1.出现如下报错 2.解决 去到nvm的安装目录&#xff0c;找到 /settings.txt文件 添加如下代码&#xff1a; node_mirror:npm.taobao.org/mirrors/node/ npm_mirror:npm.taobao.org/mirrors/npm/3.重新下载 如图成功解决

浅析HTTP协议

首先&#xff0c;前端请求后端数据&#xff0c;后端响应数据给前端&#xff0c;这是我们大家都知道的&#xff0c;那其中所涉及到的数据传输协议又是什么呢&#xff1f;这个传输规范就是我们大名鼎鼎的HTTP协议&#xff01; 什么是HTTP协议&#xff1f; HTTP&#xff08;超文本…

Springfox Swagger2从入门到精通

概述&#xff1a;Swagger 是一种用于设计、构建、文档化和使用 RESTful API 的工具。Springfox 是 Swagger 在 Spring 应用中的集成库&#xff0c;提供了自动生成 API 文档的功能。在本文中&#xff0c;我们将探讨如何使用 Springfox Swagger2 在 Spring Boot 项目中生成、配置…

使用json-server提供简易接口

json-server是一款 json 数据服务器&#xff0c;它运行 Express 服务器&#xff0c;可以对json文件、js脚本生成的json数据、远程json数据进行restful风格的增删改查操作&#xff0c;通过指定一个json文件作为api数据源&#xff0c;可以进行分页、排序、关联查询、范围查询等各…

紫光展锐M6780丨超分辨率技术——画质重构还原经典

上一期&#xff0c;我们揭秘了让画质更加炫彩的AI-PQ技术。面对分辨率较低的老电影&#xff0c;光有高饱和度的色彩是不够的&#xff0c;如何能够提高视频影像的分辨率&#xff0c;使画质更加清晰&#xff0c;实现老片新看&#xff1f; 本期带大家揭晓紫光展锐首颗AI8K超高清智…

数据安全之对称加密(九)- 数据填充实现

AES 是一种采用分组加密方法的算法。待加密的明文首先被分割成若干固定大小的块&#xff0c;每个块大小通常是128位。接着&#xff0c;这些块逐一被加密&#xff0c;转换成对应的密文块。这种处理方式确保了加密的一致性和效率&#xff0c;同时也方便了对数据的管理和加密处理。…

从物联网看智慧文旅的未来:技术与实践的完美结合,重塑旅游体验的新篇章

一、物联网技术&#xff1a;智慧文旅的基石 随着科技的飞速发展&#xff0c;物联网技术已经深入到我们生活的方方面面&#xff0c;尤其在智慧文旅领域&#xff0c;物联网技术更是起到了不可或缺的作用。它如同智慧文旅的基石&#xff0c;为旅游行业带来了前所未有的创新和变革…

基于Java SSM框架实现大学生社团管理系统项目【项目源码+论文说明】计算机毕业设计

基于java的SSM框架实现大学生社团管理系统演示 摘要 在网络迅速发展的时代&#xff0c;众多的软件被开发出来&#xff0c;给社团带来了很大的选择余地&#xff0c;而且学生越来越追求更个性的需求。在这种时代背景下&#xff0c;社团只能以学生为导向&#xff0c;按学生所需要…