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流类图结构: 流的概念和作用 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.即数据在两设备间的传输称为流,流的本质是 ...
随机推荐
- hadoop local、伪分布 模式
local模式: 把安装包 解压到 /usr/local 下 [hadoop@master local]$ sudo tar -zxvf hadoop-2.7.3.tar.gz 创建一个软连接 ...
- 如何用Java8 Stream API找到心仪的女朋友
传统的的Java 集合操作是有些啰嗦的,当我们需要对结合元素进行过滤,排序等操作的时候,通常需要写好几行代码以及定义临时变量. 而Java8 Stream API 可以极大简化这一操作,代码行数少,且 ...
- linux系统中运行node进程,无法杀死进程
events.js:72 throw er; // Unhandled 'error' event ^Error: listen EADDRINUSE at errnoException (net.j ...
- dubbo初识
1.什么是dubbo? dubbo 是一个分布式服务框架 是一个高性能的RPC框架 它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现. 谈到了分布式服务框架 那 ...
- Android中四种补间动画的使用示例(附代码下载)
场景 Android中四种补间动画. 透明度渐变动画 旋转动画 缩放动画 平移动画 注: 博客: https://blog.csdn.net/badao_liumang_qizhi关注公众号 霸道的程 ...
- Linux nohup不输出日志文件的方法
引用:https://blog.csdn.net/guotao15285007494/article/details/84136234 最近在Linux上部署视频流推送应用时,由于网络不稳定等原因程序 ...
- Ajax0002: 省市县三级联动案例
- B样条曲线方程和C++实现
功能:根据参数u值和k(大小为阶数值)与节点矢量,计算第i个k次B样条基数 输入参数: u—参数值:k—大小值为阶数:i—第i个k次B样条的支撑区间左端节点的下标:aNode为节点向量. 输出参数:返 ...
- VSTO开发指南(VB2013版) 第一章 Office对象模型
完美地将visual basic和office 办公软件结合起来.来自微软公司VSTO小组的权威专家所编著. 全书共712页,内容极其全面而深入,猛一看,厚地犹如庞然大物.看完离大神就不远了哦< ...
- 处理方法返回ModelAndView类型
1.请求 <a href="test">测试</a> 2.处理方法 @RequestMapping("/test") public Mo ...