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++->二进制文件流的输入输出的更多相关文章

  1. blob - 二进制文件流下载

    /** * 返回值文件类型为 blob 二进制流文件 * responseType: 'blob' * params 接口所需参数 * 命名文件名:依据时间戳命名文件名 * (导出时需要延迟,否则导出 ...

  2. JavaIO流(输入输出操作)

    Java中执行输出和输入操作,需要通过IO流.例如最常见的System.out.println()就是一个输出流.IO流的类比较多,但核心体系就是由File. InputStream .OutputS ...

  3. 文件流之输入输出(类似于freopen重定向)

    利用标准文件操作函数进行数据的输入输出,所用函数均在stdio.h中,类似于freopen重定向文件. 该方法的思路是: (1)建立文件指针 (2)打开文件,将文件指针指向打开的文件,并决定打开的文件 ...

  4. 利用 Blob 处理 node 层返回的二进制文件流字符串并下载文件

    博客地址:https://ainyi.com/65 解释 | 背景 看到标题有点懵逼,哈哈,实际上是后端将文件处理成二进制流,返回到前端,前端处理这个二进制字符串,输出文件或下载 最近公司有个需求是用 ...

  5. Qt QT的IO流 QT输入输出

    1. QFile QDataStream 读写文件  二进制读写文件 #include <QApplication> #include <QtGui> #include < ...

  6. Java IO(2)阻塞式输入输出(BIO)的字节流与字符流

    在上文中<Java IO(1)基础知识——字节与字符>了解到了什么是字节和字符,主要是为了对Java IO中有关字节流和字符流有一个更好的了解. 本文所述的输出输出指的是Java中传统的I ...

  7. C++学习49 对二进制文件的读写操作

    二进制文件不是以ASCII代码存放数据的,它将内存中数据存储形式不加转换地传送到磁盘文件,因此它又称为内存数据的映像文件.因为文件中的信息不是字符数据,而是字节中的二进制形式的信息,因此它又称为字节文 ...

  8. C++流类库(11)

    C++的流类库由几个进行I/O操作的基础类和几个支持特定种类的源和目标的I/O操作的类组成. 流类库的基础类 ios类是isrream类和ostream类的虚基类,用来提供对流进行格式化I/O操作和错 ...

  9. Java IO流学习

    Java IO流学习 Java流操作有关的类或接口: Java流类图结构: 流的概念和作用 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.即数据在两设备间的传输称为流,流的本质是 ...

随机推荐

  1. ubuntu 14.04 下安装 selenium 2.0

    文章参考出处:http://blog.sina.com.cn/s/blog_5042ea610102we4y.html 1.安装 python-pip sudo apt-get install pyt ...

  2. [RHEL8]安装Docker Problem: package docker-ce-3:19.03.6-3.el7.x86_64 requires containerd.io

    系统环境 # cat /etc/redhat-release Red Hat Enterprise Linux release 8.0 (Ootpa) 安装依赖 # yum install -y yu ...

  3. jsessionid與cookie關係的理解

    本地測試地址為http://localhost/TEST/login.jsf 當瀏覽器打開cookie時,瀏覽器第一次與服務器建立連接,會創建一個session,並生成一個id即jsessionid, ...

  4. SpringMVC版本报错解决办法

    报错代码: <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http:// ...

  5. Hibernate(六)--缓存策略

    缓存: 缓存就是数据库数据在内存中的临时容器,包括数据库数据在内存中的临时拷贝,它位于数据库与数据库访问中间层,ORM在查询数据时,首先会根据自身的缓存管理策略,在缓存中查找相关数据,如果发现所需的数 ...

  6. 使用placeholder属性设置input文本框的提示信息

    input文本框中设置提示信息,可以使用placeholder属性 <!DOCTYPE html> <html> <head> <meta charset=& ...

  7. 今日确定开源近两年来的EA程序

    从2018年开始研究mt4的mql,在2019年主要设计了NinjaLoveFishEA这款网格程序,稳定运行了1年多,今年的伊朗被袭击,造成金价大幅上涨,-18%止损我离场后,决定不再继续研究了. ...

  8. java设计模式学习笔记--接口隔离原则

    接口隔离原则简述 客户端不应该依赖它不需要的接口,即一个类对另一个类的依赖应建立在最小的接口上 应用场景 如下UML图 类A通过接口Interface1依赖类B,类C通过接口Interface1依赖类 ...

  9. js遇到代码出现问题时如何调试代码

    单步跟踪调试 debugger; 控制台watch功能查看变量当前值 进入函数操作 随着不断点击,不停进行循环,指定变量的值也在发生改变 添加断点 跳入跳出函数 throw new Error() 主 ...

  10. MySQL第六课

    SELECT [DISTINCT]     * /{字段名1,字段名2,字段名3,.........} FROM 表名 [WHERE 条件表达式1] [GROUP BY 字段名[HAVING 条件表达 ...