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. apache 访问日志access_log 配置和解析 rotatelogs分割日志

    一.解析访问日志        apache 的访问日志记载着大量的信息,学会高效快捷的读出其中关键信息对我们的工作有极大帮助.       如果Apache的安装方式是默认安装,服务器一运行就会有两 ...

  2. 外网访问oracle 很慢

    一台oracle服务器  对外网开放服务,外网连接后查询速度很慢,内网查询非常快.应该是这个cisco的防火墙有问题,查了很久 没有找到原因. 临时解决方法,在内网再建一台 跳转服务器,外网查询数据库 ...

  3. Vscode使用

    一. Vscode使用 1. 点击最下方的错误警告显示条,出现四个选项最后一个为终端命令(dos命令) 2. 提交代码输入提交信息,打勾提交,选择类似刷新按钮进行推送 3. 同步代码点击类似刷新按钮即 ...

  4. 我说我了解集合类,面试官竟然问我为啥HashMap的负载因子不设置成1!?

    在Java基础中,集合类是很关键的一块知识点,也是日常开发的时候经常会用到的.比如List.Map这些在代码中也是很常见的. 个人认为,关于HashMap的实现,JDK的工程师其实是做了很多优化的,要 ...

  5. Angular 从入坑到挖坑 - 组件食用指南

    一.Overview angular 入坑记录的笔记第二篇,介绍组件中的相关概念,以及如何在 angular 中通过使用组件来完成系统功能的实现 对应官方文档地址: 显示数据 模板语法 用户输入 组件 ...

  6. git rm -r --cached解决已提交的文件在.gitignore中加入忽略后无效的问题。

    有时候,发现有不该提交的文件已经提交后,仅仅在.gitignore中加入忽略是不行的.这个时候需要执行: git rm -r --cached 文件/文件夹名字 去掉已经托管的文件,然后重新提交: g ...

  7. 【Android开发艺术探索】理解Window和WindowManager

    个人博客: http://www.milovetingting.cn 理解Window和WindowManager Window表示一个窗口的概念,是一个抽象类,具体实现是PhoneWindow,可以 ...

  8. SVN状态图标不显示的解决办法

    第一步:检查设置 右键->TortoiseSVN->setting->Icon Overlays->Status cache->default/Shell.或者 右键-& ...

  9. jdk8中接口中的特性

    jdk8中可以定义静态方法(public static)和默认方法(public default),public 可以省略 调用接口中的静态方法时:只能通过接口本身来调用,不能被该接口的实现类来调 调 ...

  10. Jenkins+robotframework持续集成环境(三)

    构建job并运行 一.配置job 1.在Jenkins首页的左侧菜单栏,点击新建任务,输入一个任务名称,并选择“构建一个自由风格的软件项目”,点击确定进入配置Job页面. 2.在构建处选择Window ...