C++基础——文件操作

文章目录

  • 1 概述
  • 2 文本文件
    • 2.1 写文件
      • 2.1.1 写文件流程
      • 2.1.2 文件打开方式
    • 2.2 读文件
  • 3 二进制文件
    • 3.1 写文件
    • 3.2 读文件

1 概述

程序最基本的操作之一就是文件操作,程序运行时的数据都是临时数据,当程序结束后就不复存在了。通常都是通过文件或其他持久化存储方式存储程序运算完成的数据。
文件类型可分为:

  • 文本文件:文本文件以ascii码存储到计算机中
  • 二进制文件:文件以二进制方式存储在计算机中,难以阅读

操作文件相关的类:

  • ofstream:写操作
  • ifstream:读操作
  • fstream:读写操作

2 文本文件

2.1 写文件

2.1.1 写文件流程

#include <iostream>
#include <fstream>using namespace std;int main() {ofstream out;out.open("./test.txt", ios::out);out << "hello world";out.close();return 0;
}

在这里插入图片描述

如果文件不存在,则会创建一个文件,并写入数据

2.1.2 文件打开方式

对于文件的读写,都需要先打开文件

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

这些方式可以配合使用,采用或运算符。
比如二进制写入 ios::binary | ios::out

2.2 读文件

#include <iostream>
#include <fstream>using namespace std;int main() {ifstream in;in.open("./test.txt", ios::in);if (!in.is_open()) {cout << "open file failed" << endl;return 0;}char buff1[1024] = {0};while (in >> buff1) {cout << buff1 << endl;}in.clear();in.seekg(0, ios::beg);char buff2[1024] = {0};while(in.getline(buff2, sizeof(buff2))) {cout << buff2 << endl;}in.clear();in.seekg(0, ios::beg);string buff3;while (getline(in, buff3)) {cout << buff3 << endl;}in.clear();in.seekg(0, ios::beg);char c;while ((c = in.get()) != EOF) {cout << c;}in.close();return 0;
}

输出

hello
world
hello world
hello world
hello world

读文件操作与写文件操作类似,不过读文件有多种读取方式。
第1种读取到换行、空格等都会结束,所以是两行
后面的三种都能够输出整行。

3 二进制文件

二进制文件存储的是字符编码之后的二进制,可以通过二进制的方式打开文件,进行二进制的读写

3.1 写文件

#include <iostream>
#include <fstream>using namespace std;class Person {
public:char m_Name[64];int m_Age;
};int main() {ofstream out("./test2", ios::out | ios::binary);Person p = {"zhangsan", 23};out.write((const char *) &p, sizeof(p));out.close();
}

也是通过输出流,输出为二进制模式,通过write函数调用来谢二进制数据到文件中
打开文件普通编辑器查看只是一个有很多乱码的文件,使用二进制查看则是16进制表示的二进制数据。

3.2 读文件

#include <iostream>
#include <fstream>using namespace std;class Person {
public:char m_Name[64];int m_Age;
};int main() {ifstream in("./test2", ios::in | ios::binary);if (!in.is_open()) {cout << "test2 open fail" << endl;return -1;}Person p;in.read((char *) &p, sizeof(p));cout << "p.m_Name = " << p.m_Name << endl;cout << "p.m_Age = " << p.m_Age << endl;
}

读文件使用输入流。通过read函数调用,从文件中读取数据,可以使用对象进行读取,需要写入时按照同样的方式写入。

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

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

相关文章

【vue实战项目】通用管理系统:信息列表,信息录入

本文为博主的vue实战小项目系列中的第六篇&#xff0c;很适合后端或者才入门的小伙伴看&#xff0c;一个前端项目从0到1的保姆级教学。前面的内容&#xff1a; 【vue实战项目】通用管理系统&#xff1a;登录页-CSDN博客 【vue实战项目】通用管理系统&#xff1a;封装token操作…

显示Excel功能区或工具栏的方法不少,其中快捷方式最快

Microsoft Excel是Office套件中最复杂的工具之一&#xff0c;它提供了大量功能&#xff0c;其中大部分都是使用工具栏操作的。缺少工具栏使Excel很难完成工作。 如果Excel中没有这些关键元素&#xff0c;你将无法快速完成工作&#xff0c;因此&#xff0c;可以理解的是&#x…

处理机调度与作业调度

处理机调度 一个批处理型作业&#xff0c;从进入系统并驻留在外存的后备队列上开始&#xff0c;直至作业运行完毕&#xff0c;可能要经历如下的三级调度 高级调度 也称为作业调度、长程调度、接纳调度。调度对象是作业 主要功能&#xff1a; 挑选若干作业进入内存 为作业创建…

在Pycharm中创建项目新环境,安装Pytorch

在python项目中&#xff0c;很多项目使用的各类包的版本是不一致的。所以我们可以对每个项目有专属于它的环境。所以这个文章就是教你如何创建新环境。 一、创建新环境 首先我们需要去官网下载conda。然后在Pycharm下面添加conda的可执行文件。 用conda创建新环境。 二、…

多要素气象环境监测站知识科普

随着工业化和城市化的快速发展&#xff0c;气象环境的影响越来越受到人们的关注。为了更好地保护我们的环境&#xff0c;一款WX-CQ12 多要素气象环境监测站应运而生。这款监测站可以全方位地监测气象环境中的温度、湿度、气压、风速、风向、雨量、太阳辐射等重要要素&#xff0…

vue3高德地图使用,地址搜索,地址逆解析

在vue3项目里使用高德地图 高德地图文档 先在项目的index.html页面里添加一些东西 <script type"text/javascript">window._AMapSecurityConfig {securityJsCode: "xxxxxxxxxxxxx", //高德安全码};</script> <script src"https://…

Python---文件

文件--- 内存中存放的数据在计算机关机后就会消失。要长久保存数据&#xff0c;就要使用硬盘、光盘、U 盘等设备。为了便于数据的管理和检索&#xff0c;引入了“文件”的概念。 一篇文章、一段视频、一个可执行程序&#xff0c;都可以被保存为一个文件&#xff0c;并赋予一个…

使用docker-compose优雅部署rocketMQ

使用docker-compose优雅部署RocketMQ 随着市场的发展&#xff0c;越来越多的复杂场景出现在我们日常的开发工作中。随之也越来越多的好的工具&#xff0c;也同步出现在程序员的学习范围清单内。好的工具提高产品性能的同时&#xff0c;也带来了很多安装上的问题&#xff0c;do…

小米的算法部署岗对新手是真的友好

大家好啊&#xff0c;我是董董灿。 自从开始写一些AI行业的岗位介绍&#xff0c;就养成了一个习惯&#xff0c;在上下班的路上经常就会打开某聘瞧一瞧。 导致之前一年不看的某聘认为我要看机会换工作&#xff0c;疯狂给我推猎头&#xff0c;然后电话就进来了。 不堪骚扰的我…

【数据结构】源码角度剖析PriorityQueue

目录 认识 Queue 认识 PriorityQueue PriorityQueue为什么要用二叉堆&#xff1f; PriorityQueue构造方法源码分析 PriorityQueue 的属性 构造方法 JDK1.8传入不可比较的对象 JDK17传入不可比较的对象 传入带有Collection接口的对象 instanceof 关键字 Offer方法分析…

.net core 连接数据库,通过数据库生成Modell

1、安装EF Core Power Tools&#xff1a;打开Vs开发工具→扩展→管理扩展 2、(切记执行这步之前确保自己的代码不存在编写或者编译错误&#xff01;)安装完成后在你需要创建数据库实体的项目文件夹上面单击右键&#xff0c;找到EF Core 工具&#xff08;必须安装扩展之和才会有…

(Ant X6)子组件里的流程图画布无法显示

(Ant X6)子组件里的流程图画布无法显示 问题背景&#xff1a;侧导航页面都是子组件,建模页面的画布无法显示 解决前&#xff1a; 解决后&#xff1a; 解决思路&#xff1a;点击建模菜单时再次加载对应组件 在 Vue 中&#xff0c;每个组件都有一个唯一的 key 属性。当组件的 ke…

第二十章总结。。。

20.1线程简介. 20.2创建线程 2.1继承Thread类 Thread 类是java.lang包中的一个类&#xff0c;从这个类中实例化的对象代表线程&#xff0c;程序员启动一个新线程需要建立Thread 实例。Thread类中常用的两个构造方法如下: public Thread():创建一个新的线程对象。 public Thread…

使用Java将properties转为yaml,保证顺序、实测无BUG版本

使用Java将properties转为yaml 一 前言1.1 顺序错乱的原因1.2 遗漏子节点的原因 二、优化措施三、源码 一 前言 浏览了一圈网上的版本&#xff0c;大多存在以下问题&#xff1a; 转换后顺序错乱遗漏子节点 基于此进行了优化&#xff0c;如果只是想直接转换&#xff0c;可直接…

性能测试:系统架构性能优化

今天谈下业务系统性能问题分析诊断和性能优化方面的内容。这篇文章重点还是谈已经上线的业务系统后续出现性能问题后的问题诊断和优化重点。 系统性能问题分析流程 我们首先来分析下如果一个业务系统上线前没有性能问题&#xff0c;而在上线后出现了比较严重的性能问题&#x…

C++ CryptoPP使用AES加解密

Crypto (CryptoPP) 是一个用于密码学和加密的 C 库。它是一个开源项目&#xff0c;提供了大量的密码学算法和功能&#xff0c;包括对称加密、非对称加密、哈希函数、消息认证码 (MAC)、数字签名等。Crypto 的目标是提供高性能和可靠的密码学工具&#xff0c;以满足软件开发中对…

开启虾皮购物新旅程,快速注册买家号

想要在shopee上畅享丰富的购物体验吗&#xff1f;那就让我们一起迈出第一步&#xff0c;注册一个属于你自己的虾皮买家号吧&#xff01; 1. 访问虾皮平台 首先&#xff0c;打开你的浏览器&#xff0c;输入虾皮平台网址&#xff0c;点击注册或登录按钮。这将引导你进入注册界面…

香港媒体发稿:7个技巧助你走上营销巅峰-华媒舍

营销对于企业来说是非常重要的一环。在如今的竞争激烈的市场环境中&#xff0c;如何让自己的产品或服务更好地被消费者接受和认可&#xff0c;是每家企业都需要思考的问题。在这篇文章中&#xff0c;我们将介绍香港港媒体发稿的七个技巧&#xff0c;帮助你将营销推向一个新的高…

【自动化测试】pytest 用例执行中print日志实时输出

author: jwensh date: 20231130 pycharm 中 pytest 用例执行中 print 日志 standout 实时命令行输出 使用场景 在进行 websocket 接口进行测试的时候&#xff0c;希望有一个 case 是一直执行并接受接口返回的数据 def on_message(ws, message):message json.loads(message)…

NAT网络地址转换

目录 什么是nat nat 实验如何使用SNAT 和 DNAT 实验环境 内网连接外网 1.给网关服务器添加网卡&#xff08;两张网卡&#xff09; 2.查看新添加的网卡名 编辑网卡配置 3.开启路由转发 4.打开内网服务器 5.切换到外网服务器&#xff08;192.168.17.30&#xff0…