北大C++课后记录:文件读写的I/O流
前言
文件和平常用到的cin
、cout
流其实是一回事,可以将文件看作一个有限字符构成的顺序字符流,基于此,也可以像cin
、cout
读键盘数据那样对文件进行读写。
读写指针
- 输入流的
read
指针
- 输出流的
write
指针
注:这里的指针并不是普通的内存指针(*ptr
),而是一种叫std::streampos
类型的指针,是用于在文件流中定位文件位置的数据类型,可以类比成一个int
型的数据。
文本文件读写demo
#include <iostream>
#include <fstream>
#include <algorithm>
#include <cstring>
#include <string.h>
#include <vector>
using namespace std;int main(){vector<int> v;ifstream srcFile("testin.txt", ios :: in);ofstream destFile("testout.txt", ios :: out);int t;while(srcFile >> t)v.push_back(t);sort(v.begin(), v.end());for(auto i : v)destFile << i << ' ';//不执行close的话数据还在内存(的缓冲区)里没被磁盘读走srcFile.close();destFile.close();return 0;
}
//testin.txt: 9 84 23 15 56 2 34 123 5 1
//testout.txt: 1 2 5 9 15 23 34 56 84 123
二进制文件读写demo1
#include <iostream>
#include <fstream>
#include <algorithm>
#include <cstring>
#include <string.h>
#include <vector>
using namespace std;//写入一个整型数据后接着读出
int main(){ofstream fout("some.bat", ios::out | ios::binary); //从文件头开始,以二进制的形式写入int x = 120;//从x的内存地址开始传入4字节数据//(const char*)强转是为了让编译器拿到(int*)指针后能将其解释成字符型数据fout.write((const char*) &x, sizeof(int));fout.close();int y;ifstream fin("some.bat", ios::in | ios::binary);//从文件头开始,以二进制的形式写入//从文件开头处取出4字节数据//然后将y地址转成(char*)从而在该地址后面放入4字节数据fin.read((char*) &y, sizeof(int));fin.close();cout << y << endl;return 0;
}
二进制文件读写demo2
- 先写入三个对象的数据
#include <iostream>
#include <fstream>
#include <algorithm>
#include <cstring>
#include <string.h>
#include <vector>
using namespace std;
struct Student{char name[20];int score;
};//24-Byteint main(){Student s;ofstream OutFile("students.dat", ios::out|ios::binary);while(cin >> s.name >> s.score)OutFile.write((char*) &s, sizeof(s));OutFile.close();return 0;
}
//input:
//Tom 60
//Jack 80
//Jane 40
//^Z Enter
- 读出并合理地显示内容
#include <iostream>
#include <fstream>
#include <algorithm>
#include <cstring>
#include <string.h>
#include <vector>
using namespace std;
struct Student{char name[20];int score;
};//24-Byteint main(){Student s;ifstream inFile("students.dat", ios::in|ios::binary);if(!inFile){ //空流cerr << "error" << endl;return 0;}while(inFile.read((char*) &s, sizeof(s))){int readBytes = inFile.gcount(); //本次读进来了多少字节数据cout << "readBytes: " << readBytes << endl;cout << s.name << " " << s.score << endl;}inFile.close();return 0;
}
//output:
//readBytes: 24
//Tom 60
//readBytes: 24
//Jack 80
//readBytes: 24
//Jane 40
二进制文件读写demo3
- 用一个
fstream
流对象完成读和写的任务
#include <iostream>
#include <fstream>
#include <algorithm>
#include <cstring>
#include <string.h>
#include <vector>
using namespace std;
struct Student{char name[20];int score;
};//24-Byte
//Jane——>Mike
int main(){Student s;fstream iofile("students.dat", ios::in|ios::out|ios::binary);if(!iofile){cerr << "error" << endl;return 0;}iofile.seekp(2 * sizeof(s), ios::beg); //从文件头开始将写指针移动两个对象大小的跨度——>到第三个对象的首字节//由于Mike和Jane同字符个数,所以写入Mike后'e'的后面已经是'\0'了,其实可以不“+1”让编译器来补终止符。iofile.write("Mike", strlen("Mike") + 1); iofile.seekg(0, ios::beg); //防止读指针随机指到其他地方while(iofile.read((char*) &s, sizeof(s))){int readBytes = iofile.gcount();cout << "readByte: " << readBytes << endl;cout << s.name << " " << s.score << endl;}iofile.close();return 0;
}
// output:
// readByte: 24
// Tom 60
// readByte: 24
// Jack 80
// readByte: 24
// Mike 40
总结
- 文本模式和二进制模式的主要区别在于文本模式会执行一些与文本数据处理相关的特殊转换和处理(比如Windows下所有的
'\r\n'
会被解释成一个'\n'
字符,从而造成数据读取泄漏),而二进制模式不会执行这些操作,二进制模式保留原数据。 - 这里写入、读出时总利用
char*
作为参数的其中之一作用:是为了更好地观察、理解数据,否则其他数据类型打开在用户视角是一片乱码(可以用记事本打开dat文件验证)。
相关文章:
北大C++课后记录:文件读写的I/O流
前言 文件和平常用到的cin、cout流其实是一回事,可以将文件看作一个有限字符构成的顺序字符流,基于此,也可以像cin、cout读键盘数据那样对文件进行读写。 读写指针 输入流的read指针 输出流的write指针 注:这里的指针并不是普…...
详解Linux的grep命令
2023年9月19日,周二晚上 先写这么多吧,以后有空再更新,还要一些作业没写完.... 目录 概述查看grep命令的所有选项grep的常用选项选项-i选项-v选项-n选项-c编辑选项-l组合使用 概述 grep命令在Linux系统中是一个很重要的文本搜索工具和过…...
spark6. 如何设置spark 日志
spark yarn日志全解 一.前言二.开启日志聚合是什么样的2.1 开启日志聚合MapReduce history server2.2 如何开启Spark history server 三.不开启日志聚合是什么样的四.正确使用log4j.properties 一.前言 本文只讲解再yarn 模式下的日志配置。 二.开启日志聚合是什么样的 在ya…...
glibc: strlcpy
https://zine.dev/2023/07/strlcpy-and-strlcat-added-to-glibc/ https://sourceware.org/git/?pglibc.git;acommit;h454a20c8756c9c1d55419153255fc7692b3d2199 https://linux.die.net/man/3/strlcpy https://lwn.net/Articles/612244/ 从这里看,这个strlcpy、st…...
如何在 Buildroot 中配置 Samba
在 Buildroot 中配置 Samba 在 Buildroot 中配置 Samba 可以通过以下步骤完成: 1. 进入 Buildroot 的根目录。 2. 执行 make menuconfig 命令,打开 Buildroot 的配置菜单。 3. 在配置菜单中,使用键盘导航到 "Target packages" 选…...
SSM02
SSM02 此时我们已经做好了登录模块接下来可以做一下学生管理系统的增删改查操作 首先,我们应当有一个登录成功后的主界面 在webapp下新建 1.main.html <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"&…...
day3_QT
day3_QT 1、文件保存2、始终事件 -闹钟 1、文件保存 2、始终事件 -闹钟 widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QTimerEvent> #include <QTime> #include <QTextToSpeech>QT_BEGIN_NAMESPACE namespace Ui { clas…...
js-map方法中调用服务器接口
在 Array.prototype.map() 方法中调用服务器接口时,可以使用异步函数来处理。 示例: async function fetchData() {try {const response await fetch(https://api.example.com/data); // 通过 fetch 发送请求const data await response.json(); // 解…...
docker 已经配置了国内镜像源,但是拉取镜像速度还是很慢(gcr.io、quay.io、ghcr.io)
前言 国内用户在使用 docker 时,想必都遇到过镜像拉取慢的问题,那是因为 docker 默认指向的镜像下载地址是 https://hub.docker.com,服务器在国外。 网上有关配置 docker 国内镜像源的教程很多,像 腾讯、阿里、网易 等等都会提供…...
[linux(静态文件服务)] 部署vue发布后的dist网页到nginx
所以说: 1.windows下把开发好的vue工程打包为dist文件然后配置下nginx目录即可。 2.linux上不需要安装node.js环境。 3.这样子默认访问服务器ip地址,就可以打开,毕竟默认就是:80端口。...
智华计算机终端保护检查系统使用笔记
使用说明 【智华保密检查右键管理员运行后粘贴密码】—— 点击脚本更改系统时间【智华计算机终端保护检查系统】—— 打开检测软件进行保密检查 检测文件格式 .pdf .doc .docx .xls .pptx 检测时间日志 2023年9月14日A:【34:03秒】2023年9月14日B:【…...
前端面试话术集锦第 15 篇:高频考点(React常考进阶知识点)
这是记录前端面试的话术集锦第十五篇博文——高频考点(React常考进阶知识点),我会不断更新该博文。❗❗❗ 1. HOC 是什么?相比 mixins 有什么优点? 很多人看到高阶组件(HOC)这个概念就被吓到了,认为这东西很难,其实这东西概念真的很简单,我们先来看一个例子: func…...
汽车电子——产品标准规范汇总和梳理(适应可靠性)
文章目录 前言 一、电气性能要求 二、机械性能要求 三、气候性能要求 四、材料性能要求 五、耐久性能要求 六、防护性能要求 总结 前言 见《汽车电子——产品标准规范汇总和梳理》 一、电气性能要求 《GB/T 28046.2-2019(ISO 16750-2:2012&#…...
计算机是如何工作的(上篇)
计算机发展史 世界上很多的高科技发明,来自于军事领域 计算机最初是用来计算弹道导弹轨迹的 弹道导弹 ~~国之重器,非常重要 两弹一星 原子弹,氢弹,卫星(背后的火箭发射技术) 计算弹道导弹轨迹的计算过程非常复杂,计算量也很大 ~~ 但是可以手动计算出来的(当年我国研究两弹一…...
数学建模| 优化入门+多目标规划
优化入门多目标规划 优化入门知识什么是优化问题如何判断是不是优化问题优化模型建模求解器优化问题的分类 多目标规划 优化入门知识 什么是优化问题 优化问题:求最优,例如获利最大、最少损失、最短路径、最小化风险等等。 例如:之前文章提…...
SSM整合Thymeleaf时,抽取公共页面并向其传递参数
第一步 创建一个名为 header.html 的公共头部页面模板,放在 WEB-INF 目录下的 common 文件夹中。在 header.html 中可以编写头部页面的HTML代码,并通过Thymeleaf的语法来接收参数,如下所示: <!DOCTYPE html> <html xml…...
接口测试 —— requests 的基本了解
● requests介绍及安装 ● requests原理及源码介绍 ● 使用requests发送请求 ● 使用requests处理响应 ● get请求参数 ● 发送post请求参数 ● 请求header设置 ● cookie的处理 ● https证书的处理 ● 文件上传、下载 requests介绍 ● requests是python第三方的HTT…...
2023年华为杯数学建模研赛D题思路解析+代码+论文
下文包含:2023华为杯研究生数学建模竞赛(研赛)D题思路解析代码参考论文等及如何准备数学建模竞赛(22号比赛开始后逐步更新) C君将会第一时间发布选题建议、所有题目的思路解析、相关代码、参考文献、参考论文等多项资…...
AB试验(三)一次试验的规范流程
AB试验(三)一次试验的规范流程 一次完整且规范的A/B试验可参考下图: 确定目标和假设 核心:A/B测试是因果推断,所以我们首先要确定原因和结果。目标决定了结果,而假设又决定了原因。 如何确定 分析问题&am…...
ROI tracking by using OpenCV
目录 source code: source code: import cv2tracker cv2.TrackerKCF_create() video cv2.VideoCapture(1)while True:ret,frame video.read()cv2.imshow("source frame",frame)k cv2.waitKey(30)if k q:break bbox cv2.selectROI(frame, False) ok tracker.i…...
(leetcode)二叉树最大深度
个人主页:Lei宝啊 愿所有美好如期而遇 目录 题目: 思路: 代码: 图解: 题目: 给定一个二叉树 root ,返回其最大深度。 二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数…...
【golang】调度系列之P
调度系列 调度系列之goroutine 调度系列之m 在前面两篇中,分别介绍了G和M,当然介绍的不够全面(在写后面的文章时我也在不断地完善前面的文章,后面可能也会有更加汇总的文章来统筹介绍GMP)。但是,抛开技术细…...
Vue3中watch用法
在 Vue3 中的组合式 API 中,watch 的作用和 Vue2 中的 watch 作用是一样的,他们都是用来监听响应式状态发生变化的,当响应式状态发生变化时,都会触发一个回调函数。 当需要在数据变化时执行异步或开销较大的操作时,com…...
组里来了一个实习生,一行代码引发了一个惨案
大家好,我是静幽水,一名大厂全栈程序员,今天给大家分享一个案例,看似简单。却容易引发惨案。 事情是这样的,最近组里来了一个实习生,因为项目工作量大,人力比较紧张,所以就分配了一…...
随手笔记(四十五)——idea git冲突
图片为引用,在一次导入项目至gitee的过程中,不知道为什么报了403,很奇怪的一个错误,网上很多的答案大概分成两种。 第一种是最多的,直接找到windows凭据删掉 很抱歉的告诉各位,你们很多人到这里就已经解…...
chacha20 算法流程
chacha20算法请参看 RFC:7539。下面是我的理解,欢迎指正。 chacha20算法的基本思想:加密时,将明文数据与用户之间约定的某些数据进行异或操作,得到密文数据;由异或操作的特点可知,在解密时,只需…...
准备篇(三)Python 爬虫第三方库
第三方库无法将 "pip" 识别ModuleNotFoundError: No module named pip install 安装路径相关问题requests 库和 BeautifulSoup 库requests 库BeautifulSoup 库第三方库 Python 的 标准库 中提供了许多有用的模块和功能,如字符串处理、网络通信、多线程等,但它们并…...
从零开始的PICO开发教程(4)-- VR世界 射线传送、旋转和移动
从零开始的PICO开发教程(4)-- VR世界 射线传送、旋转和移动 文章目录 从零开始的PICO开发教程(4)-- VR世界 射线传送、旋转和移动一、前言1、大纲 二、VR射线移动功能实现与解析1、区域传送(1)新建 XR Orig…...
防止攥改之水印功能组件
防止攥改之水印功能组件 效果图逻辑代码 效果图 逻辑代码 <template><div class"containerBox" ref"parentRef" style"height: 300px;background-color: red;"><slot></slot></div> </template><script…...
iOS 17 适配 Xcode 15 问题
在适配 iOS 17 xcode 15时遇到的问题,记录一下。 1、 Could not build module ‘WebKit’ type argument nw_proxy_config_t (aka struct nw_proxy_config *) is neither an Objective-C object nor a block type解决方案: 选中不能编译的库的xcodep…...
哪个彩票网站做代理反水高/班级优化大师学生版
原来我一开始以为的\( O(n^2) \)是调和级数\( O(nlog_2n) \)的! 首先枚举猴王的桃子个数\( x \),然后使用容斥原理,枚举有至少\( k \)个不满足的条件,那么这\( k \)个不满足的条件得组合个数为\( C_{m-1}^{k} \),这\( …...
哪里找做网站的公司/seo软件
Nothing in the world can take the place persistence!博客园首页新随笔联系订阅管理随笔-213 文章-1 评论-280 LinkButton的数据绑定问题 LinkButton的数据绑定问题 如果你写成这样: <asp:LinkButton ID"btnDetail"runat"server"Text详情…...
武汉城建集团有限公司/seo 服务
现在这个在页头上显示的工具栏里面只有一个项目,我们再给它添加一个,找到 toolbar 这个容器,复制一份它里面的这个 toolbar__item 元素。这样顶部工具栏会出现两个叠加到一块儿的项目。这里我们要让它们水平排列。 回到项目,在 as…...
闵行做网站费用/清远网站seo
目录 在前面的章节中,我们是通过动态创建子进程(或子线程)来实现并发服务器的。这样做有如下缺点: 动态创建进程(或线程)是比较耗费时间的,这将导致较慢的客户响应。动态创建的子进程…...
网站首页建设公司/自己建站的网站
1、Python中获取整个页面的代码: import requests res requests.get(https://blog.csdn.net/yirexiao/article/details/79092355) res.encoding utf-8 print(res.text) 2、运行结果实例扩展: from bs4 import BeautifulSoup import time,re,urllib2 tt…...
汽车建设网站开发流程/百度seo排名优
Java NIO(New I/O)的三个属性position、limit、capacity 在缓冲区中,最重要的属性有下面三个,它们一起合作完成对缓冲区内部状态的变化跟踪: capacitypositionlimitposition和limit的含义取决于Buffer处在读模式还是写…...