C++标准库--IO类库

2023-05-16

文章目录

  • 前言
  • 一、IO类
  • 二、文件输入输出
    • 1.fstream的操作
    • 2.文件模式
  • 三、String流


前言

C++语言本身没有输入输出,而是通过定义在标准库中的类型来处理IO,这些类型支持从文件,控制台窗口读写数据,还有一些类型允许从内存IO中读写数据。


提示:以下是本篇文章正文内容,下面案例可供参考

一、IO类

1.IO库头文件和类型

1)、头文件iostream:从流读数据(istream,wistream),向流写数据(ostream,wostream),读写流(iostream,wiostream);

2)、头文件fstream:从文件 读数据(ifstream,wifstream),向文件写数据(ofstream,wofstream),读写文件(fstream,wfstream);

3)、头文件sstream:从string读数据(istringstream,wistringstream),向string写数据(ostringstream,wostringstream),读写 string(stringstream,wstringstream);

提示:带w字符开头的类型支持宽字符的输入输出。

2.IO对象不能被赋值,拷贝

fstream fs1,fs2;
fs1 = fs2; //错误,IO类型不能被赋值
void print(const ostream os); //错误声明,IO类型不能进行值传递,且不能声明为const类型,因为流的状态会改变;
//正确的声明
void print(ostream& os);
void print(ostream* os);

3.流的条件状态

//流的条件状态类型
strm::iostate // strm是一直IO类型,iostate是一种机器相关的类型,提供了表达条件状态的完整功能
//流的条件状态
strm::badbit // 指出流已崩溃
strm::failbit // 指出IO操作失败了
strm::eofbit // 指出流到达了文件结束
strm::goodbit // 指出流未处于错误状态。此值保证为零
//关于流状态的函数
fstream fs; //读写文件的流
fs.eof(); // 若流的eof被置位,返回true
fs.fail(); // 若流的failbit或badbit被置位,返回true
fs.bad(); // 若流的badbit被置位,返回true
fs.good(); // 若流处于有效状态,返回true
fs.clear(); // 将所有的条件状态复位,使流的状态置为有效,返回void
fs.clear(flags); // flags为条件状态标志位,将流对应条件状态位复位,返回void
fs.setstate(flags); // 将flags置位,返回void
fs.rdstate(); // 返回s的当前条件状态,返回值类型为strm::iostate

当流处于badbit状态时,流就无法使用了;如果流发生读字符错误时,属于流的操作失败了,在一定情况下可以被修复,则流可以继续使用;当达到文件结束位置,eofbit和failbit被置位;

3.管理输出缓冲

//每个输出流都管理一个缓冲区,来保存程序读写的数据
//导致缓冲刷新(即数据真正写到输出设备或文件)
//1)程序正常结束,作为main函数的return操作的一部分,缓冲刷新被执行;
//2) 缓冲区满时,需要刷新缓冲,而后新的数据才能被写到缓冲区
//3) 使用endl显示刷新缓冲区
cout << "hello world" << endl;
//4) 使用操作符unitbuf来设置流的内部状态,刷新缓冲区,默认cerr是设置unitbuf的
cout << unitbuf; // 该语句之后所有的输出都会立即刷新缓冲区
cout << nounitbuf; // 恢复正常的缓冲方式
//5) 一个输出流可能被关联到另外一个流,当读写被关联的流时,关联到的流的缓冲区会被刷新,默认cerr,cin都关联到cout,只能将输入流关联到输出流
istream.tie(); // 返回指向输出流的指针,如果该输入流关联到一个输出流,就返回该输出流的指针,否则返回空指针
istream.tie(&ostream); // 将istream关联到ostream
cerr.tie(&cout); // 一个输出流可以被多个流关联,每个流最多关联一个输出流
cout.tie(&cin); // 错误,输入流不能被关联
cin.tie(&cout); // cin关联到cout,任何从cin读取数据的操作都会先刷新cout

二、文件输入输出

1.fstream的操作

代码如下:

fstream fs; // 创建一个文件流,没有绑定任何文件;
fstream fs(filepath); // 创建一个文件流,并绑定一个指定路径的文件,并打开文件。这些构造函数是explicit的,文件名可以是string或者C风格字符串;
fstream fs(filepath,mode); // 创建一个文件流,并按指定mode打开文件;
fs.open(filename); // 打开文件,并与之绑定,返回void,如果成功,goodbit被置位,否则failbit被置位;
//当一个fstream对象被销毁时,close自动被调用。 
fs.close(); // 关闭与fs绑定的文件,返回void,如果需要重新绑定另外一个文件,需要先关闭之前的文件再绑定;
fs.is_open(); // 如果与fs绑定的文件被打开,就返回true;

2.文件模式

代码如下:

fstream::in // 读模式打开文件
fstream::out // 写模式打开文件
fstream::trunc // 每次写模式打开文件时会清空文件内容
fstream::app // 每次写模式打开文件时,将写操作定位到文件末尾,并不会清空文件内容
fstream::ate // 每次以任意模式打开文件时,将操作立即定位到文件末尾
fstream::binary // 以二进制方式进行IO
ifstream ifs(filepath,fstream::in);//读文件流,默认以in模式来打开文件 
// 只要写文件流才能指定trunc 或app模式,trunc,app模式只能指定一个;
ofstream ofs(filepath,fstream::app); // 文件以out模式打开文件,并且每次写操作都定位到文件末尾
ofstream ofs(filepath,fstream::out | fstream::trunc); // 文件每次被打开时,都会清空原来文件的内容;
ofstream ofs(filepath,fstream::out); // 写文件流,默认是out模式打开文件,如果没有指定app模式,打开的文件会被截断(即重新打开文件时里面的内容会被清除)
fstream fs(filepath,fstream::in | fstream::out); // 读写文件流,默认是in,out模式打开文件
ofs.open(filepath); // 没有指定模式时,以默认模式打开文件


三、String流

1.stringstream流的特有操作

sstream strm; // 声明定义一个sstream类型的对象,没有绑定任何string
sstream strm(s); // 将strm与一个为string类型的对象绑定,此构造函数是explict的
strm.str();  //返回strm所保存的string的拷贝
strm.str(s); //将string s 拷贝到strm 中,返回void

2.sstringstream的读写操作

string s = "asdfadf";
sstringstream strings(s);
strings << "helloworld" ; // s == "asdfadfhelloworld"
string s2;
strings >> s2; // s2 == "asdfadfhelloworld";
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++标准库--IO类库 的相关文章

  • 安装OOQP遇到问题

    Ubuntu20 04 安装OOQP遇到问题 OOQP安装 OOQP安装 MA27是OOQP的依赖 在安装MA27时容易出现找不到fortran77等情况 xff0c 在配置这些环境时容易出现其他错误导致系统环境出现问题 选择其他版本的安装
  • 15个好用的百度网盘搜索引擎

    15个好用的百度网盘搜索引擎 前言 分享 15 个好用的百度网盘搜索引擎 xff0c 方便大家搜索百度云网盘分享的资源文件 挑出来这 15 个效果还不错 xff0c 都可以正常使用 挑选标准 xff1a 免费 xff0c 大部分不登录可用
  • 操作系统死锁实验六

    操作系统死锁实验六 一 实验目的 如果一个进程集合中的每个进程都在等待只能由该进程集合中的其他进程才能引发的事件那么该进程集合就是死锁的 产生死锁的必要条件 xff1a 互斥 xff1b 请求资源和保持已获得资源不释放 xff1b 不可抢占
  • 修复 Windows11 打不开 Windows安全中心

    修复 Windows 打不开 Windows安全中心 遇到以上问题我们直接上解决方法 win10的话直接WIN 徽标 43 X键 win11 菜单栏输入 PowerShell 管理员启动 管理员权限打开PowerShell xff0c 依次
  • webstorm/idea 配置less环境

    看了一下发现大多数教程少了最关键的一步 如果这个lessc不能自动识别的话 需要手动寻找lessc cmd的路径 xff0c 可以在终端中通过 where lessc查找 复制lessc cmd位置就可以了
  • 自定义http钩子

    简单创建一个自定义http钩子函数 span class token keyword import span span class token punctuation span useState span class token punct
  • React Redux 工具包 Redux Toolkit 初步学习

    Redux 工具包 xff08 Redux Toolkit xff09 的目标是帮助简化常见的 Redux 用例 它并不是你想要用 Redux 做的所有事情的完整解决方案 xff0c 但它应该使你需要编写的许多与 Redux 相关的代码变得
  • 卫星导航模拟器GSS7000测试NTRIP RTK--以Ublox F9P 为例.rtklib原始观测量解算固定解FIX

    GSS7000 Ntrip 测试指南 Ntrip Networked Transport of RTCM via Internet Protocol 通过互联网进行RTCM网络传输的协议 是在互联网上进行RTK数据传输的协议 Ntrip是一
  • Ubuntu网络调试助手安装后无法打开

    转载自 解决Ubuntu网络调试助手安装后无法打开问题
  • 微机原理与接口技术之8060微处理器

    微机原理与接口技术之Intel8060微处理器 这篇bolg主要讲的是8060微处理器的内部结构 xff0c 引脚功能以及总线时序 8086内部结构 xff1a 8086CPU是由执行指令部件EU和总线接口部件BIU两部分注组成 1 EU部
  • Qt的三个基类QObject、QApplication和QWidget

    一 Qt介绍 1 概述 Qt是一个跨平台的C 43 43 图形用户界面应用程序框架 由挪威TrollTech公司出品 1996年Qt进入商业领域 xff0c 它已经成为全世界范围内数千种成功的应用程序的基础 Qt也是流行的Linux桌面环境
  • 锂电池串联放电并联充电自动转换电路

    直接通过5v充电器给串联锂电池组充电可以大大提高充电器的利用率 毕竟现在手机充电器都有 再去买个专用的锂电池平衡充电器又感觉没啥必要 一般给串联锂电池组充电的方案就是通过升压模块将5v升压后再充电 感觉有弊端 1 一般没有平衡充电功能 造成
  • Linux(Ubuntu)配置Cuda,Pytorch,Anaconda

    近期需要在Linux xff08 Ubuntu20 04 xff09 上运行一个工程 xff0c 需要搭建相关环境 xff0c 这是首次在Linux系统上完成anaconda xff0c cuda xff0c 及Pytorch的下载与配置
  • Visual Studio配置OpenGL

    近期工作中需要用到OpenGL 而之前一直是用Opencv工作 xff0c 这就需要在VS上配置OpenGL 因为是首次在VS上配置OpenGL xff0c 以备自己和有需要的小伙伴不时之需 我的VS是2022版的 xff0c 但配置流程各
  • Pycharm终端问题: python : 无法将“python”项识别为 cmdlet、函数、脚本文件或可运行

    发现这个问题的起因是我打算尝试用Django练习做网站 xff0c 需要在Pycharm终端输入一些命令以运行脚本 xff0c 我的Pycahrm配置了anaconda xff0c 但在终端运行命令时一直报错 xff1a python 无法
  • Python:把列表内容按行数写入txt

    事情的起因是我需要把一个元素全为数字的列表按固定列数写入txt文件 xff0c 也就是每行几个元素 xff0c 用逗号隔开 看了一些网上的分享觉得都不太合适 xff0c 于是自己想了一个办法 xff0c 一行代码解决 xff0c 废话少说
  • 解决Git提交代码报错: ERROR: commit xxxxx: missing Change-Id in message footer

    在近期的工作中完成代码修改提交代码时Git报错并提示提交不成功 xff0c 具体错误如下 xff1a 原因是Change Id缺失 至于解决方法 xff0c Git在报错时已经提示了 xff0c 如下图黄框所示 xff1a 首先 xff0c
  • 如何实现用串口助手实时绘制16位数据波形图

    先和大家kuan两句 xff0c 哈哈 因为之前参加智能车想用波形显示来调节PID xff0c 找了很多工具也没有成功 xff0c 心里也知道串口一次就是只能发送八位数据 xff0c 很多时候可以用字符显示16位的 xff0c 但是就不是数
  • STM32之中断方式实现串口通信

    中断方式实现串口通信 一 创建项目二 编写代码三 运行四 总结 一 创建项目 创建一个STM32f103c8的STM32CubeMX项目 xff1a SYS设置 xff1a RCC设置 xff1a 时钟树设置 xff0c 输入72后回车 x
  • 1.(1)数据结构之链表-typedef的用法

    本人坚持更新C语言 xff0c 数据结构 xff0c 操作系统知识 xff0c 可以收藏 xff0b 关注随时了解 x1f61c x1f61c x1f61c 目录 我们在之前学习结构体的时候 xff0c 是如何定义结构体的呢 xff1f t

随机推荐

  • gazebo 中创建含有二维码的墙的模型

    1 新建空白墙的模型 在gazebo中添加一个Edit gt Building Editor xff0c 生成sdf文件 xff0c 放在 gazebo models文件夹下 如图Untitled1 编辑model sdf文件 xff0c
  • 在vscode中开发arduino编译巨慢解决办法

    每次在vscode中 编译Arduino花费的时间巨长 xff0c 等的好烦 xff0c 仔细一看每次在Arduino 输出控制台上会出现一个警告 Warning Output path is not specified Unable to
  • 工作空间中的devel和build文件夹可以删掉

    工作空间中的devel和build文件夹可以删掉 xff0c 再cmake就可以产生
  • IOT的核心—无线通讯模块

    文章目录 前言一 IOT是什么 xff1f 1 IOT的运用 1 智能家居 2 无线控制 2 IOT总结 三 如何从互联网转换为物联网简述芯百特的CB2401与CB2402 1 CB2401介绍内部结构与管脚图产品应用评估板原理图 2 CB
  • STM32F103C8T6 串口3(USART3) 只能发不能收

    问题原因 xff1a 今天因为上述问题 困扰一天 xff01 最后发现是 PB8 9 xff08 配置输出 xff09 硬件短路了 xff01 问题现象 xff1a STM32F103C8T6 串口3 USART3 只能发不能收 xff01
  • eNSP第四篇:IP地址,逻辑接口,接口类型,三层路由接口,二层路由接口

    IP地址 xff0c 逻辑接口 xff0c 接口类型 xff0c 三层路由接口 xff0c 二层路由接口 私有IP地址的范围 IP范围 默认掩码 A类 10 0 0 0 10 255 255 255 255 0 0 0 B类 172 16
  • IMU及磁力计AHRS系统控制(一):传感器物理实现原理

    AHRS系统前言 AHRS是 Attitude and heading reference system 的英文缩写 xff0c 百度对此的解释是 航姿参考系统 xff0c 按笔者比较浅薄的理解就是在计算平台上通过算法处理一套部署在被控对象
  • 归并排序(C语言)详解

    记录学习第五天 今天记录一下归并排序 xff0c 因为在csdn里面没有找到特别清楚的解析 xff0c 所以想自己写的认真一点 xff0c 也查阅了一些资料 xff0c 通过这篇博客记录一下 xff1b 归并排序 xff0c 光看字面 xf
  • HTML的块级元素(常用整理)

    emmm xff0c 最近想整理复习一下前端的基础 xff0c 最开始的HTML想了好久也没想好怎么写 xff0c 最后也是决定以行块这样整理 xff0c 再在后面补充吧 说到HTML xff0c 什么是HTML呢 xff1f 什么是 HT
  • JS实现快速排序(代码+讲解)

    OK xff0c 排序这一个篇章也快要结束了 这一篇主要说的是快速排序 xff0c 说的方式主要还是先说原理 xff0c 然后再用代码来进行实现 所谓快速排序 xff0c 就是分为三步走 xff1a 第一步 xff1a 选择第一个数字分离出
  • Object.defineProperty方法(详解)

    OK xff0c 这一篇主要想说一下Object defineProperty这个方法 这个方法也是Vue数据双向绑定原理的常见面试题 所以也是有必要好好掌握的哦 首先我们知道JS中是支持面向对象编程的 xff0c 也是有着对象和类这样的概
  • 原生JS实现Promise(详解)

    摘要 首先呢 xff0c Promise是异步中比较重要的知识点 xff0c 学习的最好方法就是掌握它的基本原理 所以这一篇主要说一下如何用JS来实现一个自己的promise 构造函数 首先我们来看一下我们是如何使用promise的 xff
  • 解决winscp连接ubuntu虚拟机连续超时

    1 禁用虚拟机网络 在windows系统找到网络适配器 xff0c 禁用VMnet1和VMnet8 2 更改网络连接模式并测试网络是否连通 菜单栏 虚拟机 设置 网络适配器 xff0c 将网络模式改为桥接模式 xff0c 勾选 复制物理网络
  • Http的各种请求方法(详解)

    摘要 我们知道 xff0c 当我们访问各种网页的时候 xff0c 之所以能够看到页面 xff0c 根本原因是发送了http请求然后得到了响应 xff0c 从而页面才会弹出来 再或者我们上传一些照片和视频时 xff0c 之所以可以上传成功也是
  • React中ref的使用方法和使用场景(详解)

    摘要 不管在Vue中还是React xff0c 如果我们想使用一个元素的DOM xff0c 不需要通过JS中操纵DOM的方法 xff0c 它们提供了一个专属的API就是ref 而Vue中的ref可能比较简单 xff0c 这一篇主要讲一下如何
  • 原生JS的拖拽属性draggable(详解)

    摘要 作为h5新增的属性draggable xff0c 它能够给与一切的html元素拖动的效果 而在这个属性之下 xff0c 也有着关于拖动效果的各个方法 而这一篇文章 xff0c 主要就是说一下关于draggable属性的使用以及工作场景
  • 一篇搞定JS的位运算(公式+力扣真题)--- 持续更新

    摘要 位操作 xff08 Bit Manipulation xff09 是程序设计中对位模式或二进制数的一元和二元操作 在许多古老的微处理器上 xff0c 位运算比加减运算略快 xff0c 通常位运算比乘除法运算要快很多 在现代编程语言中
  • 【C++实现HTTP服务器项目记录】HTTP报文处理

    文章目录 一 HTTP报文格式1 请求报文2 响应报文 二 解析HTTP请求报文1 有限状态机2 状态转换图3 代码实现 三 生成HTTP响应报文1 代码实现 四 内存映射五 获取文件属性六 高级I O1 聚集写2 解决大文件传输问题 一
  • 使用PX4 模拟无人机起降 jmavsim或Gazebo环境下

    安装PX4的教程较多 xff0c 可在linux xff0c macos windows上进行安装 推荐Linux 笔者使用的是Ubuntu20 04 原因如下图 xff1a 安装好PX4后 cd到PX4安装目录 xff0c 启动仿真器 x
  • C++标准库--IO类库

    文章目录 前言一 IO类二 文件输入输出1 fstream的操作2 文件模式 三 String流 前言 C 43 43 语言本身没有输入输出 xff0c 而是通过定义在标准库中的类型来处理IO xff0c 这些类型支持从文件 xff0c 控