c++文件io,字符串io简单介绍

news2024/12/22 20:30:46

目录

c++文件io

介绍

采用文件流对象操作文件的一般步骤

示例

注意点

利用字节流特性  

字符串io

介绍

istringstream

ostringstream

示例


c++文件io

介绍

c++根据文件内容的数据格式分为二进制文件文本文件

  • 基本上和c一样

c++ 标准库中有许多不同的标志

  • 用于指定流对象的行为,可以组合在一起以设置不同的模式:

 

采用文件流对象操作文件的一般步骤

定义一个文件流对象

  • ifstream (只输入用) / ofstream(只输出用) / fstream(既输入又输出用)

使用文件流对象的成员函数打开一个磁盘文件

  • 使得文件流对象和磁盘文件之间建立联系
  • 使用提取和插入运算符对文件进行读写操作 / 使用成员函数进行读写

关闭文件

示例

#define _CRT_SECURE_NO_WARNINGS

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

using namespace std;

struct info_data {
	char _data[50]; //不能使用string/vector
	int _port;
};

class information {
public:
	//ifstream& operator<<()
	information(const string& arr) //我们的文件操作首先需要一个文件路径
		:_filename(arr) {}

	void  b_read(info_data& info) {
		ifstream i(_filename, ios_base::in | ios_base::binary);//用二进制读方式打开
		i.read((char*)&info, sizeof(info));//将流中数据读入info中
		i.close();
	}
	void b_write(const info_data& info) {
		ofstream i(_filename, ios_base::out | ios_base::binary | ios_base::app);//用二进制追加写方式打开
		i.write((const char*)&info, sizeof(info));//将info写入流中
		i.write("\n", sizeof("\n"));
		i.close();
	}

	void t_read(info_data& info) {
		ifstream i(_filename);
		i >> info._data >> info._port;//将流中数据读入info中
		i.close();
	}
	void t_write(const info_data& info) {
		ofstream i(_filename, ios_base::out | ios_base::app);//追加方式
		i << info._data << " " << info._port << endl;
		//将info写入流中(可以在中间加入空格和换行符,这样存入文件中的数据更易懂)
		i.close();
	}
private:
	string _filename;
};

int main() {
	information t("test.txt");

	//文本方式读写
	info_data data;
	t.t_write({ "hello",80 });
	t.t_read(data);
	cout << "data: " << data._data << " " << data._port << endl;

	//二进制方式读写
	info_data tmp;
	t.b_write({ "hello",80 });
	t.b_read(tmp);
	cout << "tmp: " << tmp._data << " " << tmp._port << endl;

	return 0;
}

文件内容:

代码执行结果:

注意点

如果用string/vector存储数据(也就是字符串)

  • 一旦字符串长度有点长,就会在堆上开辟空间存放数据,只会存储一个地址指向那块空间,那存入文件的也是那个地址
  • 但下次程序执行,读取文件时,会读取到上次运行时生成的地址,在这次就是无效地址,越界访问了
  • 注意,打开文件之后,如果不需要它了, 最好显式关闭文件

 

利用字节流特性  

void test3() {
	ifstream i("code.cpp");
	char c;
	while (i.get(c)) {
		cout << c;
	}
}
  • 利用文件中存储的数据是字节流形式,可以通过get函数获取字符,然后把某个文件全部读出

 

字符串io

介绍

istringstream

  • 可以从一个字符串中提取数据
  • 也是一种反序列化的过程,通常包括从字节流中读取数据,解码数据并将其还原为原始数据结构的字段

ostringstream

  • 将数据格式化为字符串,可以像输出到标准输出流一样来构建字符串
  • 属于简单序列化的过程
  • 序列化过程通常包括将数据的字段按照一定的协议编码为字节流,并将其写入文件或通过网络发送
  • 最后通过str()成员函数来获取格式化后的字符串

示例

void test2() {
	int a = 1;
	double b = 1.1;
	ostringstream o;//格式化写入
	o << a << " " << b;
	string str = o.str();
	cout << str << endl;

	ofstream i("test.txt", ios_base::out | ios_base::app);//将字符串写入文件
	i << str << endl;
	i.close();
}
  • 文件内容:
  • 代码结果:

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

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

相关文章

【Java】已解决java.util.EmptyStackException异常

文章目录 一、问题背景二、可能出错的原因三、错误代码示例四、正确代码示例五、注意事项 已解决java.util.EmptyStackException异常 一、问题背景 java.util.EmptyStackException是Java在使用java.util.Stack类时可能会遇到的一个异常。这个异常通常在尝试从空的栈中弹出&am…

CVE-2020-1957 漏洞复现

先声明一下&#xff0c;免杀还是会更的&#xff0c;不过中间可能会穿插一下渗透的内容&#xff01;&#xff01;&#xff01; 踩坑点&#xff1a; 在一开始翻阅了CSDN之后&#xff0c;发现不同文章之间存在出入&#xff0c;于是最后去了CVE的官方文档&#xff0c;和参考一些国…

JAVA每日作业day6.19

ok了家人们今天继续学习面向对象&#xff0c;话不多说看看今天学了什么 一.面向对象-封装 1&#xff0c;private private:私有的 权限修饰符 是一个成员修饰符&#xff0c;修饰成员变量 被private修饰的成员变量和成员方法只能在本类中使用 对外访问使用是 set XXX 和 get X…

Redis缓存与数据库双写不一致及解决方法

1.缓存与数据库双写不一致 在大并发下&#xff0c;同时操作数据库与缓存会存在数据不一致性问题 1.1 双写不一致情况 1.2 读写并发不一致 2.解决方法 对于并发几率很小的数据(如个人维度的订单数据、用户数据等)&#xff0c;这种几乎不用考虑这个问题&#xff0c;很少会发生…

小主机折腾记录27

1.买了一个9600k&#xff0c;3根台电 4G 2666 极光A40&#xff0c;一根台电8G2666 极光A40&#xff0c;一根国惠8G2666&#xff0c;一个惠普3热管散热器 测试结果如下 1&#xff09;三根台电 4G2666 相互兼容&#xff0c;频率2667显示正常&#xff0c;显示为美光颗粒&#xff0…

React state(及组件) 的保留与重置

当在树中相同的位置渲染相同的组件时&#xff0c;React 会一直保留着组件的 state return (<div><Counter />{showB && <Counter />} </div> ) // 当 showB 为 false, 第二个计数器停止渲染&#xff0c;它的 state 完全消失了。这是因为 React…

香港“试水”医疗多模态大模型

更好地引入及发掘行业数据有望为垂直领域内的多模态大模型开发提供新可能。中国香港特区传统科研优势要嫁接产业风口&#xff0c;国际化渠道如何与内地资源携手&#xff1f; 产业多模态大模型“风头”正盛&#xff0c;在积极寻找经济新动能的中国香港特区&#xff0c;相关产业…

onnx进阶算子优化

一、定义 如何保证pytorch 模型顺利转为onnx. 前言pytorch 算子是如何与onnx 算子对齐的&#xff1f;Asinh 算子出现于第 9 个 ONNX 算子集。PyTorch 在 9 号版本的符号表文件中是怎样支持这个算子的&#xff1f;BitShift 算子出现于第11个 ONNX 算子集。PyTorch 在 11 号版本…

QT——信号和槽

一、信号的概念 信号成员会在满足一定条件时某个对象自动触发该对象的信号(触发条件可以通过QT帮助文档进行查看每个类中标示了signals的栏位),触发后程序会调用与信号相连接的槽函数。 二、槽函数的概念 Qt中的槽函数(Slot)是与信号(Signal)对应的概念,用于接收信号…

TIME_WAIT的危害

前言 该文章主要讨论下TIME_WAIT的存在意义和潜在危害&#xff0c;以及解决措施。 具体内容 首先看一下下面这幅图 这幅图来自《TCP IP详解卷1&#xff1a;协议 原书第2版中文》TCP状态变迁图。 TIME_WAIT存在意义 可靠的终止TCP连接。 保证让迟来的TCP报文有足够的时间被…

spring中@Conditional

多环境切换 java配置使用profile Profile设置在某个环境下&#xff0c;spring注入对应的bean public class JavaConfig {BeanProfile("dev")DataSource devDs(){DataSource ds new DataSource();ds.setUrl("dev");ds.setUsername("dev");ret…

Win11 删除文件时提示“找不到该项目,请重试”的解决办法

1、Win R 打开运行窗口&#xff0c;输入 notepad 并回车打开文本文档(记事本)软件&#xff0c;如下图&#xff1a; 2、在文本文档(记事本)软件中复制粘贴以下代码&#xff0c;如下图&#xff1a; del /f /a /q \\?\%1 rd /s /q \\?\%1或DEL /F /A /Q \\?\%1 RD /S /Q \\?…

基于SpringBoot+Vue农产品管理与销售APP设计和实现(源码+LW+调试文档+讲解等)

&#x1f497;博主介绍&#xff1a;✌全网粉丝1W,CSDN作者、博客专家、全栈领域优质创作者&#xff0c;博客之星、平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌&#x1f497; &#x1f31f;文末获取源码数据库&#x1f31f; 感兴趣的可以先收藏起来&#xff0c;还…

python 版本切换,更换当前默认版本

电脑可以安装多个版本&#xff0c;但是好像没有正规的维护python版本的工具&#xff0c;比如前端就有nvm切换node版本&#xff0c;但是python我没找到比较好的&#xff08;有大佬知道路过方便留言一下&#xff0c;跪谢。。&#xff09; 废话不多说&#xff0c;更改默认版本很简…

反射复习(java)

文章目录 反射机制的作用反射机制的原理加载机制详细解释 获取 Class 对象反射获取构造方法&#xff1a;获取 Class 对象里面 Constructor 对象反射获取成员变量&#xff1a;获取Class 对象里面的 Field 对象反射获取成员方法&#xff1a;获取 Class 对象里的 Method 对象其他常…

融合创新,共筑未来 | 人大金仓为轨道交通发展注入新质力量

METROTRANS 2024 6月13日~15日&#xff0c;以“多元融合 高质量可持续发展”为主题的2024北京-南京国际城市轨道交通展览会暨高峰论坛在南京国际博览中心隆重举行。人大金仓受邀亮相本次大会&#xff0c;展示了其在轨道交通的创新应用和解决方案。 ‍点击视频 直击现场‍ 规模最…

机器学习课程复习——奇异值分解

1. 三种奇异值分解 奇异值分解&#xff08;Singular Value Decomposition, SVD&#xff09;包含了&#xff1a; 完全奇异值分解&#xff08;Complete Singular Value Decomposition, CSVD&#xff09;紧奇异值分解&#xff08;Tight Singular Value Decomposition, TSVD&…

年终奖发放没几天,提离职领导指责我不厚道,我该怎么办?

“年终奖都发了&#xff0c;你还跳槽&#xff1f;太不厚道了吧&#xff01;” “拿完年终奖就走人&#xff0c;这不是典型的‘骑驴找马’吗&#xff1f;” 每到岁末年初&#xff0c;关于“拿到年终奖后是否应该立即辞职”的话题总会引发热议。支持者认为&#xff0c;这是个人…

GLSB是什么?带你深入了解GLSB核心功能

伴随互联网的快速发展&#xff0c;大型企业等组织单位通过建设多数据中心&#xff0c;以提升用户体验。然而想要在多个数据中心实现流量的智能管理&#xff0c;提高网站的可靠性和可用性&#xff0c;则需要全局服务器负载均衡技术——GLSB的助力。GLSB是什么&#xff1f;它又有…

笔记本系统盘移植与windowsLinux双系统安装

目录 一、 前言二、 Windows系统移植二、 安装Linux三、 Windows分区配置 一、 前言 笔记本内存不够了&#xff0c;之前给笔记本添加了一个机械硬盘&#xff0c;也几乎爆满了&#xff0c;于是购置了1T的固态硬盘&#xff0c;打算用这个固态硬盘安装双系统&#xff0c;剩余空间…