C++_IO类型_文件输入输出流_字符串流
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类型_文件输入输出流_字符串流相关推荐
- java ioutils 写入文件_文件输入输出流工具: IOUtils使用总结
序言 以前写文件的复制很麻烦,需要各种输入流,然后读取line,输出到输出流...其实apache.commons.io里面提供了输入流输出流的常用工具方法,非常方便.下面就结合源码,看看IOUTil ...
- C++学习笔记-第7单元-文件输入输出流
C++学习笔记-第7单元 文章目录 C++学习笔记-第7单元 第7单元 文件输入输出流 单元导读 7.1 [C++17]文件系统 7.1.1 C++17的文件系统库简介 7.1.2 路径类及操作 7. ...
- 1.6 Java字节流的使用:字节输入/输出流、文件输入/输出流、字节数组输入/输出流
InputStream 是 Java 所有字节输入流类的父类, OutputStream 是 Java 所有字节输出流类的父类, 它们都是一个抽象类,因此继承它们的子类要重新定义父类中的抽象方法. 下 ...
- php 输入 输出,php的文件输入输出流php://input
原标题: php的文件输入输出流php://input PHP输入流php://input 在使用xml-rpc的时候,server端获取client数据,主要是通过php输入流input,而不是$_ ...
- 字节输入输出流,文件输入输出流
1.字节输入输出流 1.1 字节输入流 InputStream 类及其子类的对象表示字节输入流,InputStream 类的常用子类如下. ByteArrayInputStream 类:将字节数组转换 ...
- java输出流输入流的使用_Java中的IO流之文件输入输出流
Java中的IO流之文件输入输出流 1.文件流介绍 文件流是以字节为单位进行读写文件的,所以属于字节流,并且是低级流.文件流位于java.io包下. 输入输出流分别是FileInputSteam和Fi ...
- 一只大二狗的Android历程--文件输入输出流 SharedPreference
2017年2月28日 5:10 PM 上篇博文中写道,这次要学习数据的存储完善那个角色软件,结果在XML解析上卡了壳,看了N多论坛示例代码无奈总是执行不出来,没办法为了不拖慢进度只能继续往下学习, 这 ...
- C++文件输入/输出流类
文章目录 文件输入/输出流类 表5: 文件读写模式 表6:ios_base 标识的组合意义 ofstream:写入文件的流类 例8:输出文本文件 例9:输出二进制文件 ifstream:从文件中读取的 ...
- [html] H5的video可以播放哪些类型的文件?可以播放rtsp流吗?
[html] H5的video可以播放哪些类型的文件?可以播放rtsp流吗? Ogg.MPEG4.WebM,不能播放rtsp 个人简介 我是歌谣,欢迎和大家一起交流前后端知识.放弃很容易, 但坚持一定 ...
最新文章
- Fast ORB-SLAM
- suse mysql 5.5_suse 11 mysql 如何从5.1升级到5.5
- 【CV秋季划】人脸识别经典难题介绍,抗遮挡,跨年龄,异质源,少样本等
- 知识图谱(五)——实体消歧
- 【建议收藏】IntelliJ IDEA 常用的快捷键 提高开发效率
- C语言在数组中找到最大的元素(附完整源码)
- python开发效率怎样_Python 的开发效率真的比 Java高吗?
- 《Linux 设备驱动开发详解(第2版)》——1.4 Linux设备驱动
- Python不能做游戏?Pygame中的对象你了解吗?
- 使用Oracle VM VirtualBox创建的虚拟机与本地电脑(物理机)搭建局域网
- 解决XAMPP和VMware端口占用冲突
- JQuery canvas 验证码
- 《编程原本 》一1.8 总结
- 饿了么ui 下拉框远程搜索 绑定清空原始数据
- Delphi制作打印面签案例
- Microsoft Remote Desktop 10 - 微软官方免费远程桌面控制 Windows 的软件 APP
- 取消调试停止时自动关闭控制台,取消webapi调试时关闭浏览器自动关闭程序
- 微信 朋友圈 缩略图 php,Wordpress分享微信朋友圈缩略图设置 | 听可科技|TMC
- JavaScript 事件和事件类型
- php软件运行时出现forbidden,wampserver服务器出现Forbidden错误解决方法
热门文章
- asp.net如何取得纯客户端控件的值
- 场景应用题目常见面试真题详解
- python几种括号表示的类型
- java手动切换成独立显卡_JAVA设计模式之调停者模式
- workbench拓扑优化教程_优化技术在水泵水力设计的应用(上篇)
- 《操作系统》OS学习(五):连续内存分配 内存碎片、动态分配、碎片整理、伙伴系统
- python 人脸关键点检测_opencv+python+dlib人脸关键点检测、实时检测
- python常用代码_Python常用算法学习(3)(原理+代码)——最全总结
- 重写__repr__与__str__函数
- Linux:多进程、多线程服务器的实现解析(有图有代码有真相!!!)