概述
IO对象无拷贝和赋值,因此只能把IO类的引用作为形参或返回值类型。又因为读写IO对象会改变其状态,因此传递和返回的引用不能是const的。
流的条件状态
系统级错误:badbit
可恢复错误:failbit
到达文件结束:eofbit 当eofbit被置位的时候,failbit也会被置位
流未发生错误:goodbit
流的状态检测
流可能处于错误状态,一旦发生错误,其上后续的IO操作都会失败。因此,代码通常应该在使用一个流之前检查它是否处于良好状态。简单的办法是把它当成一个条件使用
char word;
while(cin>>word){}
由于badbit被置位时IO对象的fail函数会返回true,而eofbit被置位的时候,failbit也会被置位。所以,无论badbit,failbit和eofbit
中的哪一种被置位,IO对象的fail函数会返回true。当这三种都没被置位时,IO对象的good函数才会返回true。
因此 ,用good和fail就能确定流的总体状态是有效还是无效。eof和bad能表示特定的错误。
刷新输出缓冲区
endl:输出对象和一个换行符,然后刷新缓冲区
flush:输出对象,然后刷新缓冲区
ends:输出对象和一个空字符,然后刷新缓冲区;
unitbuf:使用cout<<unitbuf后,所有输出操作后都会立即刷新缓冲区。直到遇到cout<<nounitbuf才会回到正常的缓冲方式
头文件fstream中定义了三种类型来支持文件和读写:ifstream,ofstream和fstream
可以用>>和<<来读写文件,用getline从ifstream对象中读取数据。上面介绍到的条件状态,刷新输出缓冲区都适用于这三种类型、
文件类有构造函数,open,close和is_open成员函数。这些是文件类特有的,不能对其他IO类型调用这些操作
打开一个文件,并与文件对象关联。有两种方法
1.创建一个空文件流对象,随后调用open
char *fName="hello.txt";//或者用string类型的对象 string fName="hello.txt";
ifstream in;
in.open(ifile);
2.用带参数的构造函数,一步完成打开和绑定操作
char *fName="hello.txt";//或者用string类型的对象 string fName="hello.txt";
ifstream in(ifile);
注意open函数可能失败。因此通常要调用open后,检测下对象的状态
if(in){}close函数
1.一旦一个文件流已经打开,它就保持与对应文件的关联。如果,要将该文件流关联到另一个文件,必须首先关闭已经关联的文件。这时,要调用close函数
in.close();
in.open("practice.txt");//in与另一个文件对象关联
2.当一个文件对象被销毁的时候,close函数被自动调用
文件模式
与ifstream关联的文件默认以in模式打开,与ofstream关联的文件默认以out模式打开。与fstream关联的文件对象默认以in和out打开
以out模式打开文件会丢弃已有数据。为保留文件内容,必须显式指定app模式
ofstream out("hello.txt",ofstream::app) //app模式下,文件也总以输出方式打开
string流
istringstream
用途:当我们的某些工作是对整行文本进行处理,而其他一些工作是对行内的单个单词进行处理时,通常用到istringstream.
用法:此时将istringstream与存储行内容的string对象(可用getline将内容读入string对象)绑定(用istringstream的构造函数),再从istringstream对象中读数据
string s1,s2;
getline(cin,s1);
istringstream istr(s1);
istr>>s2;
...
ostringstream
用途:当我们逐步构造输出(多个字符串连接到一起),希望最后一起打印时,ostringstream是很有用的。
用法:
string s="beijing";
ostringstream ostr;
ostr<<"hello,"<<s;
cout<<ostr.str()<<endl; //ostringstream.str()返回ostringstream对象所保存的string对象的拷贝
最后
以上就是怡然芝麻为你收集整理的C++学习笔记-IO类的全部内容,希望文章能够帮你解决C++学习笔记-IO类所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复