当前位置: 首页 > news >正文

C++IO流

文章目录

  • 一、C++IO流体系
  • 二、C++标准IO流
  • 三、C++文件IO流
    • 1.ifstream
    • 2.ofstream

一、C++IO流体系

C++流是指信息从外部输入设备向计算机内部输入,从内存向外部输出设备输出的过程,这种输入输出的过程非常形象地被称为流的概念。IO流指的就是输入输出流。

我们平时对终端控制台的输入输出操作,对文件的输入输出操作以及对字符串的流操作,都属于C++的IO流体系。

C++系统实现了一个庞大的IO流体系,其中ios为父类,其它类都是直接或者间接继承自ios类。其中包括istream文件下的终端IO流、fstream文件下的文件IO流和sstream文件下的字符串IO流。

在这里插入图片描述

二、C++标准IO流

C++标准IO流即istream文件下的终端IO流,C++标准库提供了4个全局流对象:cin、cout、cerr、clog。

  • cin:用来进行标准输入,即数据通过键盘输入到程序中。
  • cout:用来进行标准输出,即数据从内存流向控制台。
  • cerr:用来进行标准错误的输出。
  • clog:用来进行日志的输出。

如果输入的数据类型不是字符型或者字符串型时,用cin输入的话,空格和回车都可以作为数据之间的分隔符,多个数据可以在一行输入,也可以分行输入。

但是如果输入的数据类型时字符型和字符串型时,用cin输入的话,空格和回车符是无法读取的。

三、C++文件IO流

1.ifstream

ifstream对应的是文件的读取操作,我们可以构建ifstream对象来进行文件读取操作,它的构造函数有两个:

一个是无参构造函数,无参构造函数的话需要我们手动调用ifstream类里的open函数来打开一个指定的文件。

还有一个是有参构造函数,需要传递打开文件的文件名(带路径的文件名),以及打开的选项。

在这里插入图片描述

打开的选项有inoutbinaryateapptrunc

  • in:对应文件读取操作,以读取文件的形式打开文件。
  • out:对应文件写入操作,以写入文件的形式打开文件。
  • binary:以二进制形式打开文件。
  • ate:对应文件写入操作,打开文件时文件指针指向文件的末尾。
  • app:对应文件写入操作,在文件末尾追加写入内容。
  • trunc:文件打开以后,文件原来有的内容将被清空。

下面我们演示一下ifstream对象的几种读取文件的方式:

operator>>:
由于ifstream也是继承自ios类的,它也支持流提取方式读取文件内容,这种方式不支持读取空格和换行符:

#include <iostream>
#include <fstream>using namespace std;int main()
{ifstream ifs("Test.cc", ios::in);char ch;while(ifs >> ch){cout << ch;}return 0;
}

get函数:
ifstream对象可以istream类里的get函数来实现对文件内容的读取,get函数是按字节读取,一次读取一个字符,空格和换行符它都能读取到:

#include <iostream>
#include <fstream>using namespace std;int main()
{ifstream ifs("Test.cc", ios::in);char ch;while(ifs){ch = ifs.get();cout << ch;}return 0;
}

2.ofstream

ofstream对应的是文件的写入操作,我们可以构建ofstream对象来进行文件的写入操作,它的构造函数和ifstream基本类似。

在这里插入图片描述

我们演示一下ofstream的写入操作:将上面ifstream的读取操作结合起来,用ifstream读取文件内容,再用ofstream写入到一个新的文件中:

#include <iostream>
#include <string>
#include <fstream>using namespace std;int main()
{ifstream ifs("Test.cc", ios::in);ofstream ofs("copy.cc", ios::out);char ch;while(ifs >> ch){ofs << ch;}return 0;
}
http://www.lryc.cn/news/45374.html

相关文章:

  • 交友项目【后端环境搭建】
  • 大事务问题解决方案
  • python开启局域网传输
  • 病毒丨熊猫烧香病毒分析
  • SparkSQL学习——SparkSQL配置与文件的读取与保存
  • 随想录Day45--动态规划:70. 爬楼梯 (进阶), 322. 零钱兑换, 279.完全平方数
  • 原理+案例,关于主从延迟,一篇文章给你讲明白!
  • QT开发笔记(Camera)
  • 从C++的角度讲解C#容器
  • React组件库实践:React + Typescript + Less + Rollup + Storybook
  • c++ atomic
  • 要想孩子写作文没烦恼?建议家长这样做
  • 基于Python的高光谱图像分析教程
  • 【图神经网络】从0到1使用PyG手把手创建异构图
  • 2023美赛春季赛思路分析汇总
  • GPT4国内镜像站
  • 代码随想录算法训练营第四十八天| 198 打家劫舍 213 打家劫舍II 337 打家劫舍III
  • 飞桨DeepXDE用例验证及评估
  • telegram连接本地Proxy连接不上
  • 【分布式版本控制系统Git】| 国内代码托管中心-Gitee、自建代码托管平台-GitLab
  • 【面试】BIO、NIO、AIO面试题
  • C语言实现拼图求解
  • python --获取本机屏幕分辨率
  • Java多态
  • 绝对路径和相对路径
  • Linux第二次总结
  • 算法:贪婪算法、分而治之
  • 462. 最小操作次数使数组元素相等 II——【Leetcode每日一题】
  • 对数据库的库及表的操作
  • final类又没实现接口应该用哪一种代理, jdk动态代理还是cglib代理