C++之文件操作
1.C++文件操作
C++中文件操作头文件:fstream。
文件类型:文件文件和二进制文件。
- 文件操作三大类:
ofstream 写操作
ifstream 读操作
fstream:读写操作 - 文件打开方式:
标志 | 说明 |
---|---|
ios::in | 只读 |
ios::out | 只写,文件不存在则创建,存在则打开并截断原内容 |
ios::ate | 打开一个已有的文件,并指向文件读指针指向文件尾,若文件不存在,则打开出错 |
ios::app | 打开文件,从文件尾添加内容,若文件不存在则创建 |
ios::trunc | 打开文件同时会截断原内容,单独使用时与ios::out相同 |
ios::binary | 以二进制方式打开 |
ios::in|ios::out | 打开文件,可读也可写,文件打开时原内容保持不变,若不存在则打开出错 |
ios::in|ios::out|ios::trunc | 打开文件,可读写,会截断原内容,文件不存在则创建 |
2.文本方式写入示例
#include < iostream >
#include < fstream >
using namespace std;
int main()
{/*1.创建文件*/ofstream fp;fp.open("test.txt",ios::out);//创建文件,会截断原内容if (!fp.is_open())//文件打开失败返回false{cout << "文件打开失败!" << endl;return 0;}fp << "C++文件操作示例!" << endl;fp << "写入数据测试" << endl;fp << "姓名:IT_阿水" << "t工作方向:" << "嵌入式开发" << "t工作时间:" << "6年" << endl;fp.close();//关闭文件system("pause");
}
3.文本方式读取示例
C++中读取数据有多种方式实现。
2.1 示例1:重载>>读取
#include < iostream >
#include < fstream >
using namespace std;
int main()
{ifstream ifs;ifs.open("test.txt",ios::in);//只读方式打开if (!ifs.is_open()){cout << "文件打开失败!" << endl;return 0;}string str;while (ifs >> str)//以字符串方式读取{cout << "str=" << str << endl;;}//关闭文件ifs.close();system("pause");
}
2.2 利用成员函数getline读取
#include < iostream >
#include < fstream >
using namespace std;
int main()
{ifstream ifs;ifs.open("test.txt",ios::in);//只读方式打开if (!ifs.is_open()){cout << "文件打开失败!" << endl;return 0;}//第二种:getline()char buff[1024];while (ifs.getline(buff, sizeof(buff))){cout << "buff=" << buff << endl;}//关闭文件ifs.close();system("pause");
}
2.3 单个字符方式读取get()
#include < iostream >
#include < fstream >
using namespace std;
int main()
{ifstream ifs;ifs.open("test.txt",ios::in);//只读方式打开if (!ifs.is_open()){cout << "文件打开失败!" << endl;return 0;}//第三种:单个字符方式读取char c;while ((c = ifs.get()) != EOF){cout << c;}//关闭文件ifs.close();system("pause");
}
4.二进制方式读写示例
- 二进制数据写入文件
函数:write(const _Elem* _Str, streamsize _Count)形参:_Str --写入的内容的起始地址_Count --写入的字节数
- 二进制数据读取文件
read(_Elem* _Str, streamsize _Count) ;形参:_Str --读取内容存放缓冲区_Count --要读取的字节数
#include < iostream >
#include < fstream >
#include < cstring >
using namespace std;
class Person
{
public:Person() {}Person(const char* name, int age){strcpy_s(this->name, name);this->age = age;}char name[20];//姓名int age;//年龄
};
int main()
{/*二进制写入数据示例*/fstream fs("test.doc", ios::out | ios::binary);if (!fs.is_open()){cout << "文件创建失败" << endl;return 0;}Person p("小王", 18);fs.write((const char *) & p, sizeof(p));//写入内容fs.close();//关闭文件/*二进制读取数据示例*/fs.open("test.doc", ios::in | ios::binary);if (!fs.is_open()){cout << "文件打开失败" << endl;return 0;}Person p2;fs.read((char *) & p2, sizeof(p2));cout << "读取的内容:" << endl;cout << "姓名:" << p2.name < < "t年龄:" << p2.age << endl;fs.close();system("pause");}
5.C++文件指针偏移
//C++文件指针偏移seekg(pos_type _Pos,ios_base::seekdir _Way) --用于输入流,偏移位置指针到指定位置seekp(pos_type _Pos,ios_base::seekdir _Way) --用于输出流,偏移位置指针到指定位置第一个参数:偏移量第二个参数:基于哪个位置ios::beg --文件头ios::end --文件尾ios::cur --当前位置streamoff tellg() --用于输入流,返回当前指针位置,streamoff 是一个long long类型streamoff tellp() --用于输出流,返回当前指针位置返回值返回基于文件头的偏移量,字节为单位。失败则返回-1
- 示例:
#include < iostream >
#include < fstream >
using namespace std;
int main()
{ifstream fs;fs.open("test.txt", ios::in );//打开文件,不存在则打开失败,不会截断原内容if (!fs.is_open()){cout << "文件打开失败" << endl;return 0;}fs.seekg(0,ios::end);//将文件指针偏移到文件末尾char buff[1024];streamoff size = fs.tellg();//获取文件大小cout << "文件大小:" << size << "字节" << endl;fs.seekg(0, ios::beg);//将输入流偏移到文件头while (fs >> buff){cout << buff << endl;}fs.close();system("pause");return 0;
}
相关文章:

C++之文件操作
1.C文件操作 C中文件操作头文件:fstream。 文件类型:文件文件和二进制文件。 文件操作三大类: ofstream 写操作 ifstream 读操作 fstream:读写操作 文件打开方式: 标志说明ios::in只读ios::out只写,文件不存在则…...
CentOS 7.6安装 MongoDB 5.0.2
https://developer.aliyun.com/article/983777 我遇到的问题:如何以集群的方式启动,使用replSet的方式进行启动: 需要在配置文件上加上replSet的信息 port27017 #端口 bind_ip0.0.0.0 #默认是127.0.0.1 dbpath/usr/local/mongodb/data #数据…...

Windows下安装python3教程
参考:https://blog.csdn.net/kailingr/article/details/128193083 一、安装步骤图解 准备工作: 进官网https://www.python.org/下载Python 安装包,注意:Python 3.9不能在Windows 7或更早版本上使用 安装: 1.下载完之后双击该文…...

opencv-27 阈值处理 cv2.threshold()
怎么理解阈值处理? 阈值处理(Thresholding)是一种常用的图像处理技术,在机器学习和计算机视觉中经常被用于二值化图像或二分类任务。它基于设定一个阈值来将像素值进行分类,将像素值大于或小于阈值的部分分为两个不同的类别&…...

AAOS 音频焦点请求
文章目录 前言基本概念提供给应用来获取音频焦点的apiAAOS中的音频焦点管理交互矩阵duck的实现流程AAOS 测试应用kitchensink焦点相关 前言 本文章的目标是首先了解Android中音频焦点的基本概念,理解代码中相关音频焦点的使用方法。其次理解AAOS 中相关交互矩阵概念…...
订单系统中的幂等实现
一.订单提交的例子 一个订单生成并支付的过程,大致为:用户点击前端页面提交订单->后端根据此次提交信息生成订单->用户确认订单并进行支付操作->支付成功。 主要分为前端层面,后端系统层面,数据库层面。前端层面不详述…...

三个常用查询:根据用户名 / token查询用户信息+链表分页条件查询
目录 1.根据用户名或者token查询用户信息 会员信息实体类 统一状态Result类 controller层 service层及实现类 dao层 测试: 2.链表分页条件查询 会员等级实体类 封装条件类PageVo controller层 service层及实现类 dao层 Mapper.xml层 测试 vue前端参考 1.根据用户名…...
列表、张量、向量和矩阵的关系
在数学和编程中,列表、张量、向量和矩阵之间有一定的关系。这些概念在不同领域和语境中有略微不同的定义和用法,以下是它们之间的一般关系: 列表(List): 列表是编程语言中的一种数据结构,用于存…...

华为数通HCIP-ISIS高级
isis区域间的互访 1、L2区域 to L1区域 在L1区域发布的路由会以L1-LSP在L1区域内传递,到达L1-2路由器时,L1-2路由器会将该L1-LSP转换为L2-LSP在L2区域内传递; 因此L2区域的设备可以学习到L1区域的明细路由,进行访问;…...

CorelDraw怎么做立体字效果?CorelDraw制作漂亮的3d立体字教程
1、打开软件CorelDRAW 2019,用文本工具写上我们所需要的大标题。建议字体选用比较粗的适合做标题的字体。 2、给字填充颜色,此时填充的颜色就是以后立体字正面的颜色。我填充了红色,并加上了灰色的描边。 3、选中文本,单击界面左侧…...

大致了解Redis
为了保证数据的可靠性,Redis 需要在磁盘上读写 AOF 和 RDB,但在高并发场景里,这就会直接带来两个新问题:一个是写 AOF 和RDB 会造成 Redis 性能抖动,另一个是 Redis 集群数据同步和实例恢复时,读 RDB 比较慢…...
javaweb会话技术
cookie的入门使用 package com.hspedu.cookie;import javax.servlet.ServletException; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import …...

android app控制ros机器人三(android登录界面)
接下来是二次开发的具体环节了,由于存在用户需求,用到ros-mobile不多,更偏向于android开发。 用ppt画了简单的展示界面,与用后交流界面的功能布局。先开发一代简易版本的app,后续可以丰富完善。ctrlcv上线。 登录界面…...

Android版本的发展4-13
Android 4.4 KitKat 1、通过主机卡模拟实现新的 NFC 功能。 2、低功耗传感器,传感器批处理,步测器和计步器。 3、全屏沉浸模式,隐藏所有系统 UI,例如状态栏和导航栏。它适用于鲜艳的视觉内容,例如照片、视频、地图、…...

【2023.7.29】浅谈手办——新人入坑指南
目录 前言入坑指南1.声明2.介绍3.树状图 总结参考文章 前言 出于对动漫的热爱,相信很多人都会买手办,本人在大一时开始入手了第一个手办,超大猿王路飞(高约50cm),当时对手办还不是很了解,只知道…...

使用贝叶斯算法完成文档分类问题
贝叶斯原理 贝叶斯原理(Bayes theorem)是一种用于计算条件概率的数学公式。它是以18世纪英国数学家托马斯贝叶斯(Thomas Bayes)的名字命名的。贝叶斯原理表达了在已知某个事件发生的情况下,另一个事件发生的概率。具体…...

【Kafka】消息队列Kafka进阶
目录 Kafka分区机制生产者分区写入策略轮询策略随机策略(不用)按key分配策略乱序问题自定义分区策略 消费者组Rebalance机制消费者分区分配策略Range范围分配策略RoundRobin轮询策略Stricky粘性分配策略 Kafka副本机制producer的ACKs参数acks配置为0acks…...
学习day55
消息订阅与发布 消息订阅与发布是一种组件间通信的方式,适用于任意组件间通信 使用步骤: 安装pubsub:npm i pubsub-js 引入:import pubsub from pubsub-js 接收数据:A组件想接收数据,则在A组件中订阅消息…...
C++-Rust-一次性掌握两门语言
C-Rust-一次性掌握两门语言 简介特色数据类型声明常量、变量判断与循环函数抽象化的对象:类与接口枚举模板与泛型Lambda匿名函数表达式 简介 本文主要是通过介绍C和Rust的基础语法达成极速入门两门开发语言。 C是在C语言的基础之上添加了面向对象的类、重载、模板等…...

汇编调用C语言定义的全局变量
在threadx移植中,系统的systick通过了宏定义的方式定义,很难对接库函数的时钟频率,不太利于进行维护 所以在C文件中自己定义了一个systick_Div的变量,通过宏定义方式设定systick的时钟频率 在汇编下要加载这个systick分频系数 …...

XML Group端口详解
在XML数据映射过程中,经常需要对数据进行分组聚合操作。例如,当处理包含多个物料明细的XML文件时,可能需要将相同物料号的明细归为一组,或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码,增加了开…...

CTF show Web 红包题第六弹
提示 1.不是SQL注入 2.需要找关键源码 思路 进入页面发现是一个登录框,很难让人不联想到SQL注入,但提示都说了不是SQL注入,所以就不往这方面想了 先查看一下网页源码,发现一段JavaScript代码,有一个关键类ctfs…...

【JavaEE】-- HTTP
1. HTTP是什么? HTTP(全称为"超文本传输协议")是一种应用非常广泛的应用层协议,HTTP是基于TCP协议的一种应用层协议。 应用层协议:是计算机网络协议栈中最高层的协议,它定义了运行在不同主机上…...
k8s从入门到放弃之Ingress七层负载
k8s从入门到放弃之Ingress七层负载 在Kubernetes(简称K8s)中,Ingress是一个API对象,它允许你定义如何从集群外部访问集群内部的服务。Ingress可以提供负载均衡、SSL终结和基于名称的虚拟主机等功能。通过Ingress,你可…...

CMake基础:构建流程详解
目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...

YSYX学习记录(八)
C语言,练习0: 先创建一个文件夹,我用的是物理机: 安装build-essential 练习1: 我注释掉了 #include <stdio.h> 出现下面错误 在你的文本编辑器中打开ex1文件,随机修改或删除一部分,之后…...
基于数字孪生的水厂可视化平台建设:架构与实践
分享大纲: 1、数字孪生水厂可视化平台建设背景 2、数字孪生水厂可视化平台建设架构 3、数字孪生水厂可视化平台建设成效 近几年,数字孪生水厂的建设开展的如火如荼。作为提升水厂管理效率、优化资源的调度手段,基于数字孪生的水厂可视化平台的…...
浅谈不同二分算法的查找情况
二分算法原理比较简单,但是实际的算法模板却有很多,这一切都源于二分查找问题中的复杂情况和二分算法的边界处理,以下是博主对一些二分算法查找的情况分析。 需要说明的是,以下二分算法都是基于有序序列为升序有序的情况…...
Swagger和OpenApi的前世今生
Swagger与OpenAPI的关系演进是API标准化进程中的重要篇章,二者共同塑造了现代RESTful API的开发范式。 本期就扒一扒其技术演进的关键节点与核心逻辑: 🔄 一、起源与初创期:Swagger的诞生(2010-2014) 核心…...

Linux --进程控制
本文从以下五个方面来初步认识进程控制: 目录 进程创建 进程终止 进程等待 进程替换 模拟实现一个微型shell 进程创建 在Linux系统中我们可以在一个进程使用系统调用fork()来创建子进程,创建出来的进程就是子进程,原来的进程为父进程。…...