C++->二进制文件流的输入输出
C++->文件流的输入输出
1.书本里以“简单事务处理”为例子,解析二进制输入输出文件流的read和write函数的使用,以及输入输出文件流 过程中指针的捕获、定位,文件流位置的判断,二进制文件转换为文本文件。
1.1.二进制文件流的read函数的原型:read(char *buffer,streamsize size);
1.2.二进制文件流的write函数的原型:write(char *buffer,streamsize size); 注释:这里buffer是一块内存的地址,用来存储或读出数据。参数size是一个整数值,表示用从缓存(buffer)中读出或写入的字符数。
1.3.移动,获取指针位置函数
1.3.1.移动读、写指针位置
istream&/input.seekg(20,ios::beg); //以流开始位置为基准,后移20个字
istream&/input.seekg(-10,ios::cur); //以指针当前位置为基准,前移10个字
istream&/input.seekg(-10,ios::end); //以指针结尾位置为基准,前移10个字
ostream&/output.seekp()移动(写读)指针位置与seekg类似,
ostream&/output.seekp(120); //output流的写指针移到第120个(字节)处
input.tellg()返回读指针的当前位置值,要求返回值为long型
output.tellp()返回(写读)指针的当前位置值,要求返回值为long型
input.seekg(0,ios::beg); long posBeg=input.tellg(); //返回读指针的当前位置(文件开始位置)值
output.seekp(0,ios::end); long posEnd=output.tellp(); //返回写读指针的当前位置(文件末尾位置)值 在读文件流时既可以用“返回读指针当前位置值”函数,(也可以用“返回读写指针当前位置值”函数)来判断指针当前位置;
------------------------------------------------------------------------------------------------------------------------
1.4.C++判断指针当前位置需要三步,
第一步:把指针移到目标位置用istream/ostream &seekg/p(0/1/-1,ios::beg/cur/end)/seekg/p(long pos)函数,
第二步:用long pos=istream/ostream.tellg/p();获取指针当前位置值,
第三步:用判断语句对文件流移动指针位置值与获取目标指针位置值进行对比,得出运行结果。
1.5.与C语言的不同在于,C语言的位置变动只有rewind(fp1)函数、fseek(fp,100L,0/1/2)函数、ftell()函数, 只要指针移到对应的位置就可以对文件流进行读写,读和写指针不区分开来;
1.5.1.rewind(fp1):使位置指针重新返回文件的开头;
1.5.2.fseek()函数对文件流进行顺序和随机读写: fseek(文件类型指针,位移量,起始点), “起始点”用0、1或2代替,0代表“文件开始”-SEEK_SET,1为“当前位置”-SEEK_CUR,2为“文件末尾”-SEEK_END;位移量
的数据类型要求为long型,这样当文件的长度大于64K时不致于出问题。
1.5.3.ftell():得到流式文件中的当前位置,如果ftell()函数返回值为-1L,表示出错,long i=ftell(fp(文件类型指针));
1.5.4.C语言把文件指针用参数传递,C++把文件指针封装成对象,引用时用文件指针对象+点符号+函数名称进行使用。
C++->二进制文件流的输入输出的更多相关文章
- blob - 二进制文件流下载
/** * 返回值文件类型为 blob 二进制流文件 * responseType: 'blob' * params 接口所需参数 * 命名文件名:依据时间戳命名文件名 * (导出时需要延迟,否则导出 ...
- JavaIO流(输入输出操作)
Java中执行输出和输入操作,需要通过IO流.例如最常见的System.out.println()就是一个输出流.IO流的类比较多,但核心体系就是由File. InputStream .OutputS ...
- 文件流之输入输出(类似于freopen重定向)
利用标准文件操作函数进行数据的输入输出,所用函数均在stdio.h中,类似于freopen重定向文件. 该方法的思路是: (1)建立文件指针 (2)打开文件,将文件指针指向打开的文件,并决定打开的文件 ...
- 利用 Blob 处理 node 层返回的二进制文件流字符串并下载文件
博客地址:https://ainyi.com/65 解释 | 背景 看到标题有点懵逼,哈哈,实际上是后端将文件处理成二进制流,返回到前端,前端处理这个二进制字符串,输出文件或下载 最近公司有个需求是用 ...
- Qt QT的IO流 QT输入输出
1. QFile QDataStream 读写文件 二进制读写文件 #include <QApplication> #include <QtGui> #include < ...
- Java IO(2)阻塞式输入输出(BIO)的字节流与字符流
在上文中<Java IO(1)基础知识——字节与字符>了解到了什么是字节和字符,主要是为了对Java IO中有关字节流和字符流有一个更好的了解. 本文所述的输出输出指的是Java中传统的I ...
- C++学习49 对二进制文件的读写操作
二进制文件不是以ASCII代码存放数据的,它将内存中数据存储形式不加转换地传送到磁盘文件,因此它又称为内存数据的映像文件.因为文件中的信息不是字符数据,而是字节中的二进制形式的信息,因此它又称为字节文 ...
- C++流类库(11)
C++的流类库由几个进行I/O操作的基础类和几个支持特定种类的源和目标的I/O操作的类组成. 流类库的基础类 ios类是isrream类和ostream类的虚基类,用来提供对流进行格式化I/O操作和错 ...
- Java IO流学习
Java IO流学习 Java流操作有关的类或接口: Java流类图结构: 流的概念和作用 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.即数据在两设备间的传输称为流,流的本质是 ...
随机推荐
- [MongoDB]评估使用mongodb的五个因素
企业选择 NOSQL 或非表格结构数据库,评估时应从以下五个关键维度来考虑:• 数据模型的类型• 查询模型是否能满足灵活的查询需求• 事务模型类型,以及一致性属于强一致性还是最终一致性• APIs 的 ...
- JavaScript-迭代器模式
迭代器模式 顺序访问一个集合 使用者无需知道集合内部结构(封装) jQuery 示例 <!DOCTYPE html> <html> <head> <meta ...
- Git安装与配置,以及pycharm提交代码到github
1.下载git,安装 下载好后直接下一步到底,安装成功(选择组件页面,可以勾选上控制台窗口字体选项,如下图) 2.配置Git信息 1.打开窗口中,输入:git --version 查看已安装的git版 ...
- 【读书笔记】https://source.android.google.cn/devices/bootloader
https://source.android.google.cn/devices/bootloader 本文主要记录aosp官网关于bootloader的相关资料 Bootloader A bootl ...
- 软链接和硬链接——Linux中的文件共享
硬链接(Hard Link)和软链接也称为符号链接(Symbolic Link)的目的是为了解决文件的共享使用问题.要阐明其原理,必须先理解Linux的文件存储方式. 索引结点 Linux是一个UNI ...
- for循环嵌套练习题or99乘法表
//输出1-10之间的和 public static void whileTest(){ //定义变量用于存储不断变化的和 int sum = 0; //定义变量,用于记录不断变化的被加数 int x ...
- 快速读写模板(int)
一.快速读入模板(int) inline int read(int x){ char ch=getchar(); int x=0,f=1; while(ch>='9'||ch<='0'){ ...
- css基础-css选择器和css文本样式相关
css基础-css选择器和css文本样式相关: 使用link链入外部样式,页面加载时会同时加载样式 @import url(“*.css”);使用导入式,页面加载完后,才会加载样式 链接伪类的顺序 : ...
- Maven国内镜像配置(阿里云)-sunziren
<?xml version="1.0" encoding="UTF-8"?> <settings xmlns="http://mav ...
- 【python基础语法】第2天作业练习题
""" 1.用户输入一个数值,请判断用户输入的是否为偶数?是偶数输出True,不是输出False(提示:input输入的不管是什么,都会被转换成字符串,自己扩展,想办法将 ...