IO类型

  • iostream: 用于窗口的输入输出
  • fstream: 用于文件读写
  • sstream :读写存储在内存中的string对象

注:他们继承于istream与ostream,因此istream对象也可用于读取ifstream, string对象, ostream对象同上; 并且iostream类型可在同一个流实现输入输出操作;.
IO对象不可复制赋值

ofstream out1,out2;
out1=out2;  //不支持
ofstream print(ofstream);//在形参传递过程中涉及到复制操作
out2=print(out2);
//形参或返回类型不能为流类型,如果需要返回或传递IO对象,必须返回或传递该对象的指针或引用
//采用const修饰,那么就在读写过程中就不能改变IO对象状态了,SO,不可用const修饰

IO条件状态
条件状态包含:

  • strm:badbit :被破坏的流
  • strm::failbit: 失败的IO操作
  • strm::eofbit: 指出流已经到达文件结束符
  • clear: 将流中状态值重置为有效值
  • setstate: 添加指定条件(为strm::iostate类型)
    注:前三者都为iostate类型, IO类定义了3个iostate类型的常量值:badbit,failbit,eofbit

所有流对象都包含一个条件状态成员,由setstate,clear(添加IO条件,将某个条件状态设置为有效值)操作管理;该状态成员为iostate类型,以二进制(bit)形式使用.
流的状态由bad,fail,eof,good操作提示,流正确时bad,fail,eof返回 false,good返回true
例:流状态的查询与控制

int i;
while(cin>>i,!cin.eof()){if(cin.bad)throw runtime_error("流被破坏");if(cin.fail){cerr<<"数据错误,重试";cin.clear(istream::failbit);continue;}
}

当同时使用多个状态时可采用直接或运算(满足条件的二进制位都变为1)

i.setstate(ifstream::badbit|ifstream::failbit);
//同时将开启流状态成员

输入输出缓冲区管理
每个IO对象都具有一个缓冲区,用于储存程序读写数据
如下操作导致缓冲区内容被刷新

  • 程序正常结束
  • 缓冲区已经存满
  • 使用操作符显示刷新缓冲区,例:endl,flush
  • 输入操作完成,用unitbuf操作符设置流内部状态
  • 将输入输出流关联,在读取时将刷新关联的输出缓冲区

注:unitbuf用于刷新所有输出,当程序不正常结束,不会刷新缓冲区,系统不会在程序崩溃时自动刷新缓冲区
输入输出关联
IO对象具有tie函数,用法如下:

cin.tie(&cout);//cin的任何操作都会刷新关联的缓冲区
ostream *old_tie=cin.tie();
cin.tie(0);//形参为0打破二者的绑定
cin.tie(old_tie);//重新关联

文件输入流与输出流

  • ofstream: 输出文件流,创建文件并向文件写入信息
  • ifstream:输入文件流,从文件读取信息
  • fstream:同时具有ofstream与ifsteam的功能

文件操作时,C++源代码必须包含< iostream> < fstream>
打开文件
void open(const char *filename,ios::openmode mode);
第一个参数文件位置及文件名,第二个参数打开类型; open是文件流对象的成员函数
mode具有如下:

  • ios::app :在文件末尾添加内容
  • ios::ate :文件打开后定向到末尾
  • ios::in :打开文件用于读取
  • ios::out :打开文件用于输入
  • ios:trunc :打开文件清空已存在的文件流(我的理解是覆盖以前文件内容,有不对的地方还请指出)

以上介绍的标志可以结合使用,out,trunc,app只能用于指定与ofstream或fstream对象关联的文件,默认打开形式只有in,out

ofstream outfile;
outfile.open("data.txt",ios::in|ios::trunc);
//或者
fstream file; //fstream对象默认打开方式为in和out同时打开
file.open("data.txt",ios::in|ios::out);

关闭文件: 流对象.close();
写入文件: 流插入运算符(<<)
读取文件: 流提取符(>>)
实例操作:

#include<iostream>
#include<fstream>
using namespace std;
int main(){char data[100];ofstream outfile;outfile.open("记录.txt",ios::app); //此处可做修改cin.getline(data,100);//接受一个字符串,可以接收空格,将其存储到数组中,最大存储99个字符outfile<<data;outfile.close();ifstream infile;infile.open("记录.txt");infile>>data;cout<<data<<endl; infile.close();return 0;
} 

字符串流

标准库定义三种类型字符串流

  • istringstream: istream派生,提供读string
  • ostringstream: ostream派生,提供写string
  • stringstream: iostream派生,提供读写
    注:必须包含sstream头文件

stringstream的特定操作

  • stringstream strm: 创建对象
  • stringstream strm(s): 用string对象s初始化strm;
  • strm.str(): 返回strm中存储的string类型对象
  • strm.str(s): 将s复制给strm,返回void

ostringstream可用于格式转换
istringstream自动将数值类型的字符转化为相应数值

int i=1,j=2;
ostringstream s1;
s1<<i<<"i"<<j<<"j";//现在str内存储的是"12"的字符串
istringstream s2(s1.str());//用s1初始化s2
string dump;
s2>>i>>dump>>j>>dump;//接收分割效果的字符串,必须保证存储操作与读取操作格式一致
cout<<i<<j;

注:上述操作中注意需要将string对象分割才能得到,空白符与换行符会被忽略

C++_IO类型_文件输入输出流_字符串流相关推荐

  1. java ioutils 写入文件_文件输入输出流工具: IOUtils使用总结

    序言 以前写文件的复制很麻烦,需要各种输入流,然后读取line,输出到输出流...其实apache.commons.io里面提供了输入流输出流的常用工具方法,非常方便.下面就结合源码,看看IOUTil ...

  2. C++学习笔记-第7单元-文件输入输出流

    C++学习笔记-第7单元 文章目录 C++学习笔记-第7单元 第7单元 文件输入输出流 单元导读 7.1 [C++17]文件系统 7.1.1 C++17的文件系统库简介 7.1.2 路径类及操作 7. ...

  3. 1.6 Java字节流的使用:字节输入/输出流、文件输入/输出流、字节数组输入/输出流

    InputStream 是 Java 所有字节输入流类的父类, OutputStream 是 Java 所有字节输出流类的父类, 它们都是一个抽象类,因此继承它们的子类要重新定义父类中的抽象方法. 下 ...

  4. php 输入 输出,php的文件输入输出流php://input

    原标题: php的文件输入输出流php://input PHP输入流php://input 在使用xml-rpc的时候,server端获取client数据,主要是通过php输入流input,而不是$_ ...

  5. 字节输入输出流,文件输入输出流

    1.字节输入输出流 1.1 字节输入流 InputStream 类及其子类的对象表示字节输入流,InputStream 类的常用子类如下. ByteArrayInputStream 类:将字节数组转换 ...

  6. java输出流输入流的使用_Java中的IO流之文件输入输出流

    Java中的IO流之文件输入输出流 1.文件流介绍 文件流是以字节为单位进行读写文件的,所以属于字节流,并且是低级流.文件流位于java.io包下. 输入输出流分别是FileInputSteam和Fi ...

  7. 一只大二狗的Android历程--文件输入输出流 SharedPreference

    2017年2月28日 5:10 PM 上篇博文中写道,这次要学习数据的存储完善那个角色软件,结果在XML解析上卡了壳,看了N多论坛示例代码无奈总是执行不出来,没办法为了不拖慢进度只能继续往下学习, 这 ...

  8. C++文件输入/输出流类

    文章目录 文件输入/输出流类 表5: 文件读写模式 表6:ios_base 标识的组合意义 ofstream:写入文件的流类 例8:输出文本文件 例9:输出二进制文件 ifstream:从文件中读取的 ...

  9. [html] H5的video可以播放哪些类型的文件?可以播放rtsp流吗?

    [html] H5的video可以播放哪些类型的文件?可以播放rtsp流吗? Ogg.MPEG4.WebM,不能播放rtsp 个人简介 我是歌谣,欢迎和大家一起交流前后端知识.放弃很容易, 但坚持一定 ...

最新文章

  1. Fast ORB-SLAM
  2. suse mysql 5.5_suse 11 mysql 如何从5.1升级到5.5
  3. 【CV秋季划】人脸识别经典难题介绍,抗遮挡,跨年龄,异质源,少样本等
  4. 知识图谱(五)——实体消歧
  5. 【建议收藏】IntelliJ IDEA 常用的快捷键 提高开发效率
  6. C语言在数组中找到最大的元素(附完整源码)
  7. python开发效率怎样_Python 的开发效率真的比 Java高吗?
  8. 《Linux 设备驱动开发详解(第2版)》——1.4 Linux设备驱动
  9. Python不能做游戏?Pygame中的对象你了解吗?
  10. 使用Oracle VM VirtualBox创建的虚拟机与本地电脑(物理机)搭建局域网
  11. 解决XAMPP和VMware端口占用冲突
  12. JQuery canvas 验证码
  13. 《编程原本 》一1.8 总结
  14. 饿了么ui 下拉框远程搜索 绑定清空原始数据
  15. Delphi制作打印面签案例
  16. Microsoft Remote Desktop 10 - 微软官方免费远程桌面控制 Windows 的软件 APP
  17. 取消调试停止时自动关闭控制台,取消webapi调试时关闭浏览器自动关闭程序
  18. 微信 朋友圈 缩略图 php,Wordpress分享微信朋友圈缩略图设置 | 听可科技|TMC
  19. JavaScript 事件和事件类型
  20. php软件运行时出现forbidden,wampserver服务器出现Forbidden错误解决方法

热门文章

  1. asp.net如何取得纯客户端控件的值
  2. 场景应用题目常见面试真题详解
  3. python几种括号表示的类型
  4. java手动切换成独立显卡_JAVA设计模式之调停者模式
  5. workbench拓扑优化教程_优化技术在水泵水力设计的应用(上篇)
  6. 《操作系统》OS学习(五):连续内存分配 内存碎片、动态分配、碎片整理、伙伴系统
  7. python 人脸关键点检测_opencv+python+dlib人脸关键点检测、实时检测
  8. python常用代码_Python常用算法学习(3)(原理+代码)——最全总结
  9. 重写__repr__与__str__函数
  10. Linux:多进程、多线程服务器的实现解析(有图有代码有真相!!!)