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

目录

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.mfbz.cn/a/724990.html

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

相关文章

Ollama(docker)+ Open Webui(docker)+Comfyui

Windows 系统可以安装docker desktop 相对比较好用一点&#xff0c;其他的应该也可以 比如rancher desktop podman desktop 安装需要windows WSL 安装ollama docker docker run -d --gpusall -v D:\ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama 这里…

CI /CD学习

CI/CD概述 CI/CD 是持续集成和持续交付/部署的缩写&#xff0c;旨在简化并加快软件开发生命周期。 持续集成&#xff08;CI&#xff09;是指自动且频繁地将代码更改集成到共享源代码存储库中的做法。持续交付和/或持续部署&#xff08;CD&#xff09;是一个由两部分组成的过程…

Paper Reading: PAMS:通过参数化最大尺度量化超分辨率

PAMS: Quantized Super-Resolution via Parameterized Max Scale PAMS&#xff1a;通过参数化最大尺度量化超分辨率, ECCV 2020 paper: https://arxiv.org/pdf/2011.04212.pdf GitHub: https://github.com/colorjam/PAMS 摘要 深度卷积神经网络&#xff08;DCNNs&#xff09;…

HumanPlus——斯坦福ALOHA团队开源的人形机器人:融合影子学习技术、RL、模仿学习

前言 今天只是一个平常的日子&#xff0c;不过看到了两篇文章 一篇是《半年冒出近百家新公司&#xff0c;「具身智能」也有春天》 我看完之后转发到朋友圈&#xff0c;并评论道&#xff1a;让机器人翻一万个后空翻&#xff0c;不如让机器人打好一个螺钉&#xff0c;毕竟在目前…

Flutter第十三弹 路由和导航

目标&#xff1a; 1.Flutter怎么创建路由&#xff1f; 2.怎么实现路由跳转&#xff1f;页面返回&#xff1f; 一、路由 1.1 什么是路由&#xff1f; 路由(Route)在移动开发中通常指页面&#xff08;Page&#xff09;&#xff0c;在Android中通常指一个Activity。所谓路由管…

什么是Linux挂载

首先先说一下在Linux中一切皆文件&#xff08;硬件设备也是文件&#xff09;&#xff0c;所有文件都是存放在以根目录为树形目录结构中&#xff1b;下面来说说一下什么是挂载 挂载&#xff1a;指的就是将设备文件中的顶级目录连接到 Linux 根目录下的某一目录&#xff08;最好是…

5.音视频基础 FLV

目录 简说FLV FLV Header FLV Body Tag Header ​编辑Tag Data Audio Data Video Data Script Data 简说FLV FLV格式可以包含音频、视频和文本数据&#xff0c;并且可以在网络上进行流媒体传输。优点是文件大小较小&#xff0c;压缩效率高&#xff0c;并且可以在较低…

深度解析ISO9001质量管理体系认证的核心优势

ISO9001质量管理体系认证是一项全球通用的标准&#xff0c;旨在帮助企业优化质量管理&#xff0c;提升市场竞争力。本文将详细解析ISO9001认证为企业带来的多重核心优势。 首先&#xff0c;ISO9001认证显著提升了企业的产品和服务质量。通过建立和实施系统化的质量管理流程&…

为数据安全护航,袋鼠云在数据分类分级上的探索实践

在大数据时代&#xff0c;数据具有多源异构的特性&#xff0c;且价值各异&#xff0c;企业需依据数据的重要性、价值指数等予以区分&#xff0c;以利采取不同的数据保护举措&#xff0c;避免数据泄露。故而&#xff0c;数据分类分级管理属于数据安全保护中极为重要的环节之一。…

小白速成AI大模型就看这份资源包

前言 在数字化浪潮席卷全球的今天&#xff0c;人工智能&#xff08;AI&#xff09;技术已成为推动社会进步的重要引擎。尤其是AI大模型&#xff0c;以其强大的数据处理能力和广泛的应用前景&#xff0c;吸引了无数人的目光。然而&#xff0c;对于初学者“小白”来说&#xff0…

面向AI时代的软件开发新范式

作为一名软件开发者&#xff0c;有幸站在了AI时代的风口浪尖。在这篇博客中&#xff0c;我将分享我的个人看法&#xff0c;一起走向AI时代软件开发新范式。 首先&#xff0c;我们要明确软件开发活动产生的各种制品&#xff0c;都是人类知识的载体&#xff0c;也是人类文明的高级…

22种常用设计模式示例代码

文章目录 创建型模式结构型模式行为模式 仓库地址https://github.com/Xiamu-ssr/DesignPatternsPractice 参考教程 refactoringguru设计模式-目录 创建型模式 软件包复杂度流行度工厂方法factorymethod❄️⭐️⭐️⭐️抽象工厂abstractfactory❄️❄️⭐️⭐️⭐️生成器bui…

【Linux】Xshell和Xftp简介_安装_VMware虚拟机使用

1、简介 Xshell简介 Xshell是一款强大的安全终端模拟软件支持SSH1、SSH2以及Microsoft Windows平台的TELNET协议。该软件通过互联网实现到远程主机的安全连接&#xff0c;并通过其创新性的设计和特色帮助用户在复杂的网络环境中高效工作。Xshell可以在Windows界面下访问远端不…

阿里云域名解析

阿里云域名控制台&#xff1a;https://dc.console.aliyun.com/next/index#/domain-list/all

【两数之和】

两数之和 一、题目二、暴力解法三、哈希表四、map字典1.基本方法.set()添加键值对.get()通过键获取值.has()判断map是否有这个键 2.map和set的联系和区别共同点共同点MapSet 一、题目 二、暴力解法 三、哈希表 解题思路&#xff1a;将nums的元素依次以键值对的方式存储在map字典…

Hadoop升级失败,File system image contains an old layout version -64

原始版本 Hadoop 3.1.3 升级版本 Hadoop 3.3.3 报错内容如下 datasophon 部署Hadoop版本 查看Hadoop格式化版本 which hadoop-daemon.sh/bigdata/app/hadoop-3.1.3/sbin/hadoop-daemon.sh删除原来的旧版本 rm -rf /bigdata/app/hadoop-3.1.3查看环境变量 env|grep HADOOPHAD…

VMware虚拟机三种网络模式设置 - Bridged(桥接模式)

一、前言 由于linux目前很热门&#xff0c;越来越多的人在学习linux&#xff0c;但是买一台服务放家里来学习&#xff0c;实在是很浪费。那么如何解决这个问题&#xff1f;虚拟机软件是很好的选择&#xff0c;常用的虚拟机软件有vmware workstations和virtual box等。 在使用虚…

五种HTTP数据传输方式

在前端开发过程中,后端主要提供 http 接口来传输数据,而这种数据传输方式主要有五种: url paramqueryform-urlencodedform-datajson 下面就让我们一起来了解一下在Nest.js中如何使用这五种HTTP数据传输方式: 一,创建项目 使用nest new 创建一个nest的项目 nest new 项目名称 …

基于IDEA的Maven(properties属性配置)

&#xff08;property &#xff1a;财产&#xff09;properties&#xff1a;它的复数。 同样也是基于上篇博客进行学习。&#xff08;具体的全部项目代码和结构可以去查看上篇...&#xff09; <properties><!--当前jdk版本 , 这一步可以完全省略--><maven.com…

找不到concrt140.dll无法继续执行代码的几种解决方法

在数字时代&#xff0c;电脑用户经常会遇到各种技术问题&#xff0c;其中DLL文件缺失是最常见的问题之一。今天&#xff0c;我们将重点介绍CONCRT140.DLL文件的重要性&#xff0c;以及当它丢失时对电脑的影响。同时&#xff0c;我们提供了五种解决方法和预防措施&#xff0c;帮…