注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

在路上...

点滴感悟,成长记录...

 
 
 

日志

 
 

【Reading】标准IO库之文件流和字符串流  

2011-12-02 17:41:13|  分类: Reading |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

看完了primer的第八章-标准IO库,有一些收获。

首先要明白一点,不管是标准输入输出流还是文件流抑或字符串流,它们都以流对象的形式出现在程序中,所起的作用也是一个中间传递作用。它们都有自己的缓冲区和流状态。

1、流状态

流状态以二进制位(bit)的形式使用,其类型是iostate,主要包括如下几种状态。一般fail、bad、eof和good是用来进行判断状态的,clear则是用来设置状态的。

【Reading】标准IO库之文件流和字符串流 - 紫玄客 - 在路上...

 对于clear来说,在文件流中用的比较多,因为如果我们要把一个文件流和另外一个文件进行关联的话,需要先关闭当前的文件,然后再打开另外一个,如果不知道当前的文件流对象的状态,就需要调用clear清除掉所以可能存在的错误状态,然后即可放心的打开另外一个文件。如下的例子所示:

ifstream& open_file(ifstream &in,const string &file)

{

in.close();

in.clear();

in.open(file.c_str());

return in;

}

下面这个例子也是同样的意思,是循环读文件的过程:

ifstring input;

vector<string>::const_iterator it = files.begin();

while(it != files.end())

{

input.open(it->c_str());

if(!input)

break;

while(input>>s)

process(s);

input.close();

input.clear();

++it;

}

2、输出缓冲区
为了防止程序崩溃时数据没有输出到设备中而是停留在缓冲区中,我们要经常对缓冲区进行刷新。最常用的就是endl操作符了,它的作用是输出一个换行符并刷新缓冲区,所以,要养成多用endl少用'\n'的习惯。
3、文件流
文件流对象要和具体文件进行关联,要么直接指定文件名,如ifstream infile("filename"),要么是把文件名存入一个string对象s,然后调用s的c_str成员,即ifstream infile(s.c_str())。即不能直接把标准库string对象作为实参传给infile,而应该是C风格字符串。详细说明见下图:
【Reading】标准IO库之文件流和字符串流 - 紫玄客 - 在路上...
在打开文件时,要注意文件模式问题。不管是和ifstream流对象还是和ofstream流对象关联的文件,在打开它们时都需要考虑文件模式。比如默认时,和ofstream流对象关联的文件以out模式打开,而和ifstream流对象关联的文件则以in模式打开。注意:以out模式打开的文件内容会被清空,所以从效果来看,和ofstream流对象关联的文件以out模式打开,相当于同时指定了out和trunc模式。
下面是几种主要文件模式:
【Reading】标准IO库之文件流和字符串流 - 紫玄客 - 在路上...
 4、字符串流
stringstream是用来处理字符串的操作,它可以提供字符串类型和其他类型的转换,如可以将一个数值型的数据集合表示为string类型,反之亦然。另外,如要获取stringstream对象中存储的string对象,需要调用它的str成员函数。下面是一个例子:

int va1 = 512,va2 = 1024;
string str1,str2;
ostringstream form1;
form1<<"hello"<<va1<<"world"<<va2;
istringstream form2(form1.str());
form2>>str1>>str2>>va1>>va2;
cout<<va1<<" "<<va2<<endl;
cout<<str1<<endl;
cout<<str2<<endl;
cout<<form1<<endl;
cout<<form1.str()<<endl;
运行结果如下所示:
【Reading】标准IO库之文件流和字符串流 - 紫玄客 - 在路上...
 
 

  评论这张
 
阅读(203)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017