C++二进制文件的读与写

1. 二进制文件的读与写ofstream fout; ifstream fin;

——学习把结构体类型写到二进制文件中。
代码实现:

/*
_4.cpp 学习总结 视频学习C++_Primer_Plus_17_6
1. 二进制文件的读与写
2. 写操作:fout类比cout操作,cout能操作的fout也适用
3. 易错点1:读写操作时,读in,写out,不可写错易错点2:写操作时,添加要求时,貌似或(|)与或之间的顺序也要注意
4. fout.write((char *) &p1, sizeof p1);解释两个参数参数1:地址。&p1表示地址,(char *)强转,固定,参数2:字节大小。读函数同理类知识中对这个两个函数有详细讲解
*/
#include <iostream>
#include <fstream>
#include <iomanip> //输出格式用//内联函数吃没用的字符
inline void eatline() { while(std::cin.get() != '\n') continue; }struct Planet
{char name[20];double papolation;double g;
};//结构体星球const char* filename = "plants.dat";int main()
{using namespace std;//写进二进制文件ofstream fout(filename, ios_base::out | ios_base::app | ios_base::binary);Planet p1;   cout << "以空白行结束输入:" << endl;cin.get(p1.name, 20);while(p1.name[0] != '\0'){eatline();//吃没用的字符//输入星球数据cin >> p1.papolation;cin >> p1.g;eatline();//吃没用的字符//写操作fout.write((char *) &p1, sizeof p1);cout << "以空白行结束输入:" << endl;cin.get(p1.name, 20);}fout.close();//读二进制文件ifstream fin;fin.open(filename, ios_base::in | ios_base::binary);if(!fin.is_open()){cout << "打不开此文件:" << filename << endl;exit(EXIT_FAILURE);}cout << fixed;//不用科学计数法显示cout.precision(2);//精度保留两位小数cout.setf(ios_base::showpoint);//显示小数点,不写(输入135.0,显示135)cout << "读文件并显示:" << endl;while(fin.read((char *) &p1, sizeof p1)){cout << "Name: " << p1.name << endl;cout << "Population: " << p1.papolation << endl;cout << "G: " << p1.g << endl;}fin.close();return 0;
}

2. 在二进制文件的任意位置进行存储或者修改 fstream finout;

——修改二进制文件中的结构体内容。
代码实现:

/*
_5.cpp 学习总结 视频学习C++_Primer_Plus_17_7
1.  修改二进制文件中的结构体内容planet.dat二进制文件已存在(内容为4个Planet)该示例将完成以下工作:a. 询问要修改哪条记录b. 显示未修改的记录 c. 显示已修改的记录2. seekg():将输入指针移至指定的文件位置seekp():将输出指针移到指定文件位置原型1:seekg(streampos) streampos place = rec * sizeof p1;原型2:seek(streamoff, ios_base::seekdir) 未应用
3. fstream finout; 读写都可以
*/
#include <iostream>
#include <fstream>
#include <iomanip> //输出格式用//内联函数吃没用的字符
inline void eatline() { while(std::cin.get() != '\n') continue; }struct Planet
{char name[20];double papolation;double g;
};//结构体星球const char* filename = "plants.dat";int main()
{using namespace std;Planet p1;fstream finout;//打开二进制文件,可能读也可能写,planet.dat二进制文件已存在(内容为4个Planet)finout.open("planets.dat", ios_base::in | ios_base::out | ios_base::binary);if(!finout.is_open()){cout << "打不来此文件:planets.dat" << endl;exit(EXIT_FAILURE); }//修改第 rec 个结构体的内容,rec(0,1,2,3...),place即是第rec的首地址cout << "输入要修改的第几个结构体内容(0,1,2,3): ";int rec; cin >> rec; eatline();streampos place = rec * sizeof p1;//文件输出指针重新定位finout.seekg(place);//把该位置的内容存到p1内finout.read((char *)&p1, sizeof p1);//显示该位置本来内容cout << "显示该位置本来内容: " << endl;cout << "Name: " << p1.name << endl;cout << "Poluation: " << p1.papolation << endl;cout << "G: " << p1.g << endl;//输入要修改的的内容:cout << "输入要修改的的内容:" << endl;cout << "Name: ";cin >> p1.name;cout << "Population: ";cin >> p1.papolation;cout << "G: ";cin >> p1.g;eatline();//文件输入指针重新定位,然后写入finout.seekp(place);finout.write((char *)&p1, sizeof p1);//再次显示该位置内容:cout << "再次显示该位置内容:" << endl;finout.seekg(place);finout.read((char *)&p1, sizeof p1);cout << "Name: " << p1.name << endl;cout << "Poluation: " << p1.papolation << endl;cout << "G: " << p1.g << endl;return 0;
}

3. 知识点。

常量含义
ios_base::in打开文件,以便读取
ios_base::out打开文件
ios_base::out打开文件,以便写入
ios_base::app追加到文件末尾
ios_base::trunc如果文件存在,清空文件内容
ios_base::binary二进制文件
C++模式C模式含义
ios_base::in“r”打开文件,以便读取
ios_base::out“w”等价于ios_base::out | ios_base::trunc
ios_base::out | ios_base::trunc“w”打开以写入,如果文件存在,先清空文件
ios_base::out | ios_base::app“a”打开以写入,只追加
ios_base::in | ios_base::out“r+”打开以读写,在文件允许的位置写入
ios_base::in | ios_base::out | ios_base::trunc“w+”打开以读写,如果文件按存在,清空文件

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

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

相关文章

书生·浦语大模型实战营第二期作业六

1、安装环境&#xff1a; 2、安装legent和agentlego&#xff1a; 3、部署apiserver&#xff1a; 4、legent web demo&#xff1a; 5、没搜到&#xff0c;很尴尬&#xff1a; 6、自定义工具&#xff1a; 7、智能体“乐高”&#xff1a; 8、智能体工具&#xff0c;识别图片&#…

Leetcode274. H 指数(简单易于理解)

题目描述 给你一个整数数组 citations &#xff0c;其中 citations[i] 表示研究者的第 i 篇论文被引用的次数。计算并返回该研究者的 h 指数。 根据维基百科上 h 指数的定义&#xff1a;h 代表“高引用次数” &#xff0c;一名科研人员的 h 指数 是指他&#xff08;她&#x…

Java文件/文件夹的新增/删除/递归遍历

获取File对象 这里的字符串可以乱写&#xff0c;但是如果不存在后续的操作也会失败 // 获取抽象的File对象&#xff08;文件或者目录&#xff0c;不一定真实存在&#xff09;File file1 new File("D:\\2_WorkSpace\\qcbyProject\\shixun\\collection-test\\src\\FileTes…

Java基础 - 注解

注解是放在Java源码的类、方法、字段、参数前的一种特殊“注释”&#xff1a; // this is a component: Resource("hello") public class Hello {Injectint n;PostConstructpublic void hello(Param String name) {System.out.println(name);}Overridepublic String…

youlai-boot项目的学习—工程构建与运行

开发环境 系统:mac OS Ventura 13.2.1 终端: item2 Homebrew: 4.3.5 IDE: IntelliJ IDEA 2024.1.1 (Ultimate Edition) 代码分支 仓库&#xff1a;https://gitee.com/youlaiorg/youlai-boot.git 分支&#xff1a; master commit: 9a753a2e94985ed4cbbf214156ca035082e02723 …

C# OpenCvSharp 图像复制-clone、copyTo

在C#中使用OpenCvSharp库处理图像时&#xff0c;clone和copyTo是两个非常常用的函数。理解和合理使用这些函数可以帮助你在图像处理项目中更高效地操作图像数据。本文将详细介绍这两个函数的使用方法&#xff0c;并通过具体的示例来说明它们的实际应用。 1. clone 函数 定义 …

《全网首发》平衡三进制图灵机的构建

PS:以下内容均为本人原创&#xff0c;未经授权及许可&#xff0c;严禁引图、转载或加工&#xff0c;违者必究。 ————2024年6月13号 1、图灵机的概述 图灵机&#xff08;Turing machine&#xff09;是一种理论计算模型&#xff0c;由英国数学家阿兰图灵&#xff08;Alan T…

vue-饼形图-详细

显示效果 代码 <template> <div style"height: 350px;"> <div :class"className" :style"{height:height,width:width}"></div> </div> </template> <script> import * as echarts from echarts; req…

fiddler打开后,requests无法使用

Fiddler实用小技巧 错误情况 打开fiddler后&#xff0c;requests无法请求 requests.exceptions.ProxyError: HTTPSConnectionPool(hosth5api.m.taobao.com, port443): 说明 其实这是一个很小的坑&#xff0c;确也是一个很常见的坑。 在打开fiddler后&#xff0c;根据fiddle…

[C语言] 常用排序算法

冒泡排序 思路&#xff1a; 从小到大&#xff0c;找到集合中最小的放在最左边&#xff0c;在剩下的集合中找到最小的放在最左边以此类推。如何找到最小的&#xff1f;&#xff08;假定左边第一个数就是最小的&#xff0c;让它依次和它右边的比较&#xff0c;如果右边的比它还小…

LaTeX 学习 第1节 数学模型概说

----用教授的方式学习 https://download.csdn.net/download/weixin_38135241/89416392 LaTex 安装包 LaTeX 有多种工作模式&#xff1a;输入一行文字时我们在水平模式&#xff0c;在水平模式上&#xff0c;文字、符号等各种排版元素&#xff0c;也就是各种盒子&#xff0c;都…

厂里资讯之自媒体文章自动审核

自媒体文章-自动审核 1)自媒体文章自动审核流程 1 自媒体端发布文章后&#xff0c;开始审核文章 2 审核的主要是审核文章的内容&#xff08;文本内容和图片&#xff09; 3 借助第三方提供的接口审核文本 4 借助第三方提供的接口审核图片&#xff0c;由于图片存储到minIO中&…

虚拟化技术Docker

Docker在计算机的分类中&#xff0c;主要属于虚拟化技术的一种&#xff0c;并且具体地说&#xff0c;它是基于软件的虚拟化技术。以下是详细的分类和解释&#xff1a; 虚拟化技术分类&#xff1a; 基于硬件的虚拟化&#xff1a;硬件物理平台本身提供了对特殊指令的截获和重定向…

Python|OpenCV-实现识别弧形文字(17)

前言 本文是该专栏的第19篇,后面将持续分享OpenCV计算机视觉的干货知识,记得关注。 我们知道,OCR可以识别文字方面的需求,但是如果遇到那些目标文字是“弧形文字”,需要怎么去识别呢?遇到想要识别“弧形文字”的需求,这个时候你可以借助于Opencv+OCR技术来实现。 而本…

DeepDriving | 经典的目标检测算法:CenterNet

本文来源公众号“DeepDriving”&#xff0c;仅用于学术分享&#xff0c;侵权删&#xff0c;干货满满。 原文链接&#xff1a;经典的目标检测算法&#xff1a;CenterNet 1 前言 CenterNet是2019年发表的一篇文章《Objects as Points》中提出的一个经典的目标检测算法&#xf…

VBA_NZ系列工具NZ08:图表添加标签工具

我的教程一共九套及VBA汉英手册一部&#xff0c;分为初级、中级、高级三大部分。是对VBA的系统讲解&#xff0c;从简单的入门&#xff0c;到数据库&#xff0c;到字典&#xff0c;到高级的网抓及类的应用。大家在学习的过程中可能会存在困惑&#xff0c;这么多知识点该如何组织…

Python3 笔记:字符串的 encode() 和 bytes.decode()

1、encode() 方法以指定的编码格式编码字符串。 语法&#xff1a;str.encode(encodingUTF-8,errorsstrict) 参数&#xff1a; encoding&#xff1a;要使用的编码&#xff0c;如: UTF-8。 errors&#xff1a;设置不同错误的处理方案。默认为 strict,意为编码错误引起一个Uni…

[Java]讲解@CallerSensitive注解

【版权声明】未经博主同意&#xff0c;谢绝转载&#xff01;&#xff08;请尊重原创&#xff0c;博主保留追究权&#xff09; https://blog.csdn.net/m0_69908381/article/details/139726506 出自【进步*于辰的博客】 参考笔记三&#xff0c;P53.1。 1、介绍 大家可能没注意过…

micro SD控制——zynq(未完)

文章目录 一、SD基础知识二、SD卡控制器三、文件系统&#xff08;FATFS&#xff09;四、 SD卡控制任务&#xff1a;4.1 txt文本任务&#xff1a;4.1.1 硬件部分&#xff1a;4.1.2 软件部分&#xff1a;1.板级支持包中加入FATFS文件系统2.C设计 一、SD基础知识 1.SD卡的类型、协…

跟着刘二大人学pytorch(第---12---节课之RNN基础篇)

文章目录 0 前言0.1 课程视频链接&#xff1a;0.2 课件下载地址&#xff1a; 1 Basic RNN1.1 复习DNN和CNN1.2 直观认识RNN1.3 RNN Cell的内部计算方式 2 具体什么是一个RNN&#xff1f;3 使用pytorch构造一个RNN3.1 手动构造一个RNN Cell来实现RNN3.2 直接使用torch中现有的RN…