C++_IO库学习篇

一、IO类

                             IO库类型和头文件

头文件类型
iostream

istream 从流中读取数据

ostream 向流写入数据

iostream 读写流

fstream

ifstream 从文件中读取数据

ofstream  文件写入数据

fstream 读写文件

sstream

 

istringstream 从string读取数据

ostringstream 向string写入数据

stringstream 读写string                              

 

 

 

 

 

 

 

 

由于ifstream 和istringstream都继承自istream。因此我们可以像使用istream对象一样来使用ifstream和istringstram对象。

(继承:程序设计功能,令一个类型可以从另一个类型继承接口。)

eg:    ostringstream out1;  

         string test(4,‘r’);

         out1 << test <<endl; //可以向ostringstream对象写入string数据

 

IO对象无拷贝或赋值

注意:因为我们不能对IO对象进行拷贝或者赋值操作

          因此以下操作一定要避免

         1. 将流类型设置为形参或者返回类型

         2.传递和返回流的引用不能是const的(读写IO对象就会改变其状态)

 

条件状态

定义:可以被任何流类使用的一组标志和函数,用来指定给定流是否可用。

                                              IO库条件状态

strm::iostatestrm是一种IO类型,提供表达条件状态的完整功能
strm::badbit指出流已经崩溃
strm::failbit指出一个IO操作失败了
strm::eofbit用来指出流已经到达文件尾
strm::goodbit用来指出流位处于错误状态
s.eof()若流s,  eofbit置位,返回true
s.fail()若流的failbit,bad置位,返回true
s.bad()bad位置位,返回true
s.good()若流处于有效状态,返回true
s.clear()

将流s中所有条件状态位复位,流的状态设置为有效

s.clear(flag)根据给定娥fl复位ags标志位,将流s中对应条件状态复位
s.setstate(flags)根据给定娥fl复位ags标志位,将流s中对应条件状态置位
s.rdstate返回流s的当前条件状态,返回值类型位strm:iostate

 

输出缓冲区

每个输出流都管理一个缓冲区,用来保存程序读写的数据。

eg: os << "ok";

文本字符串可能立即打印出来,但也有可能被操作系统保存在缓冲区内,随后再打印。

好处:设备的写操作很费时,如果操作系统将多个输出操作组合为一个单一的设备写操作可以带来很大的性能提升。

 

刷新输出缓冲区的操作

cout << "hi" << endl; //输出一个hi 换行 后刷新

cout << "hi" << flush;//输出 “hi” 后刷新

cout << "hi"  << ends;//输出 “hi” 空字符 后刷新

 

unitbuf

执行cout << unitbuf 所有输出操作后都会立即刷新缓冲区

执行cout << nounitbuf 回到正常的缓冲方式

 

关联输入和输出流

当一个输入流被关联道一个输出流是,任何试图从输入流读取数据的操作都会先刷新关联的输出流,标准库讲过cout和cin关联在一起,因此下面的语句

cin >> ival;

导致cout的缓冲区被刷新。

(交互式系统一你该关联输入输出流。这意味着所有输出,包括用户提示信息,都会在读操作之前被打印出来)

 

文件输入输出

头文件fstream定义了三个类型支持文件IO:

ifstream从一个给定文件读取数据

ofstream向一个给定文件写入数据

fstream可以读写给定文件

 

fstream特有的操作

fstream fstrm 创建一个未绑定的文件流,fstream是头文件fstream中定义的一个类型

fstream fstrm(s) 创建一个fstream,并打开名为s的文件。s可以是string类型,或者是一个指向C风格字符串的指针。这些构造

                               函数都是explicit。

fstream fstrm(s, mode); 与前一个构造函数类似,但按指定mode打开文件

fstrm.open(s)          打开名为s的文件,并将fstrm绑定。s可以是一个string或一个指向C风格字符串的指针。默认的文件mode

                               依赖于fstream的类型。返回void

fstrm.close()    关闭与fstrm绑定的文件。返回void

fstrm.is_open()     返回一个bool值,指出与fstrm关联的文件是否成功打开且尚未关闭

 

使用文件流对象

成员函数open和close

如果我们定义了一个空文件流对象,可以随后调用open来将他与文件关联起来

ifstrem in(ifile);   //构建一个ifstream并打开给定文件

ofstream out;  //输出文件未与任何文件相关联

out.open(ifile + ".copy"); //打开指定文件

 

一旦一个文件流已经打开,他就保持对应文件的关联,实际上,对一个已经打开的文件流调用open就会失败,并会导致failbit被置位,随后的试图使用文件流的操作都会失败,。为了将文件流关联到另外一个文件,必须先关闭已经关联的文件。

in.close();    //关闭文件

in.open(ifile + "2");

 

自动构造和析构

 当一个fstream对象被销毁时,close会被自动调用。

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值