返回   cpper编程论坛 > C/CPP/TMP/GP
注册账号 论坛帮助 会员列表 日历事件 搜索 今日新帖 标记版面已读

回复
 
LinkBack 主题工具 显示模式
  #1 (permalink)  
旧 2008-06-11
初级会员
 
注册日期: 2008-06-11
帖子: 8
hzzhouqq 正向着好的方向发展
默认 ifstream->stringstream?

请教各位高手,如何将ifstream里面的内容直接,输出到stringstream的中,而不需要其它中间变量呢?


谢谢!。。
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
回复时引用此帖
  #2 (permalink)  
旧 2008-06-12
polyrandom 的头像
超级版主
 
注册日期: 2002-09-03
帖子: 3,117
文章: 20
polyrandom 正向着好的方向发展
默认 回复: ifstream->stringstream?

我直接能想到的是istreambuf_iterator/istream_iterator -> string -> stringstream。我觉得如果直接在streambuf那一层应该还有别的方法可以操作而且效率更高,但是懒得查文档了。
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
回复时引用此帖
  #3 (permalink)  
旧 2008-06-13
初级会员
 
注册日期: 2008-06-11
帖子: 8
hzzhouqq 正向着好的方向发展
默认 回复: ifstream->stringstream?

搞了一天,streambuf这层还是没找到什么方法。。。唉。
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
回复时引用此帖
  #4 (permalink)  
旧 2008-06-13
Elminster 的头像
超级版主
 
注册日期: 2002-09-09
帖子: 1,759
Elminster 正向着好的方向发展
默认 回复: ifstream->stringstream?

引用:
作者: hzzhouqq 查看帖子
搞了一天,streambuf这层还是没找到什么方法。。。唉。
你为什么要做这个事情?或许可以找找有没有绕过去的办法。
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
回复时引用此帖
  #5 (permalink)  
旧 2008-06-13
polyrandom 的头像
超级版主
 
注册日期: 2002-09-03
帖子: 3,117
文章: 20
polyrandom 正向着好的方向发展
默认 回复: ifstream->stringstream?

其实istreambuf_iterator就是绕过去的方法了,那个效率上已经够可以了。
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
回复时引用此帖
  #6 (permalink)  
旧 2008-06-16
初级会员
 
注册日期: 2008-06-11
帖子: 8
hzzhouqq 正向着好的方向发展
默认 回复: ifstream->stringstream?

谢谢版主的提醒。

ifstream ifs ;
string strCache ;

ifs.open("mage.txt", std::ios::in | std::ios::binary ) ;
if (!ifs)
std::cout << "open file error.\n" ;

istreambuf_iterator<char> iter(ifs) ;
strCache = string( iter, (istreambuf_iterator<char>()) );


这样做会将文件中所有内容全部复制到strCache中。
但是,如果我只是要复制前100个字节呢?

之前我没有表达清楚。我使用stringstream, 是因为它的read和write方法,可以方便的读取指定字节数量的内容和写入指定字节数量的内容。而不是像iterator, 一个个字节的推进。

istreambuf_iterator,可以指定字节的读取和写入吗?


此帖于 2008-06-16 10:41 PM 被 hzzhouqq 编辑.
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
回复时引用此帖
  #7 (permalink)  
旧 2008-06-16
polyrandom 的头像
超级版主
 
注册日期: 2002-09-03
帖子: 3,117
文章: 20
polyrandom 正向着好的方向发展
默认 回复: ifstream->stringstream?

string s( 100 );
istr.read( &s[0], s.size() );
s.resize( istr.gcount() );
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
回复时引用此帖
  #8 (permalink)  
旧 2008-06-17
初级会员
 
注册日期: 2008-06-11
帖子: 8
hzzhouqq 正向着好的方向发展
微笑 回复: ifstream->stringstream?

引用:
作者: polyrandom 查看帖子
string s( 100 );
istr.read( &s[0], s.size() );
s.resize( istr.gcount() );

如果这样使用的话,还是没有迏到我本来的目的,fstream->stringstream. 不需要任何中间变量(容器).

Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
回复时引用此帖
  #9 (permalink)  
旧 2008-06-17
polyrandom 的头像
超级版主
 
注册日期: 2002-09-03
帖子: 3,117
文章: 20
polyrandom 正向着好的方向发展
默认 回复: ifstream->stringstream?

引用:
作者: hzzhouqq 查看帖子
如果这样使用的话,还是没有迏到我本来的目的,fstream->stringstream. 不需要任何中间变量(容器).

不需要任何中间变量(容器)的目的是什么?只是希望看看行不行?还是为了效率?
中间变量的定义是什么?未命名的临时变量算不算呢?
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
回复时引用此帖
  #10 (permalink)  
旧 2008-06-17
初级会员
 
注册日期: 2008-06-11
帖子: 8
hzzhouqq 正向着好的方向发展
默认 回复: ifstream->stringstream?

Q: 不需要任何中间变量(容器)的目的是什么?只是希望看看行不行?还是为了效率?
A: 为了效率。也为了书写的美观和程序的简洁。

Q: 中间变量的定义是什么?未命名的临时变量算不算呢?
A: 中间变量指的是任何本人定义的变量,不包括编译器生成的变量。

fstream->stringstream, 或许是概念上的错误吧。
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
回复时引用此帖
  #11 (permalink)  
旧 2008-06-17
polyrandom 的头像
超级版主
 
注册日期: 2002-09-03
帖子: 3,117
文章: 20
polyrandom 正向着好的方向发展
默认 回复: ifstream->stringstream?

我觉得这已经不是ifstream->stringstream了,按照你前面的定义,你想要做的应该是提取ifstream开始处的连续n个字节作为一个stringstream,不知道我的理解是不是正确?
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
回复时引用此帖
  #12 (permalink)  
旧 2008-06-17
初级会员
 
注册日期: 2008-06-11
帖子: 8
hzzhouqq 正向着好的方向发展
默认 回复: ifstream->stringstream?

>> "我觉得这已经不是ifstream->stringstream了,按照你前面的定义,你想要做的应该是提取ifstream开始处的连续n个字节作为一个stringstream,不知道我的理解是不是正确?"

>> 对。
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
回复时引用此帖
  #13 (permalink)  
旧 2008-06-20
polyrandom 的头像
超级版主
 
注册日期: 2002-09-03
帖子: 3,117
文章: 20
polyrandom 正向着好的方向发展
默认 回复: ifstream->stringstream?

stl这个层面无法解决。使用别的模板库也许可以解决,但是效率并不见得高。
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
回复时引用此帖
  #14 (permalink)  
旧 2008-07-23
初级会员
 
注册日期: 2008-06-11
帖子: 8
hzzhouqq 正向着好的方向发展
酷

无意中找到了一些方法, 只适合文本文件.
ifstream in("abc.txt") ;
stringstream strBuf ;

while ( in.get(*strbuf.rdbuf()) ) {
in.ignore() ; //忽略文件尾标志
}


from << C++编程思想 >> p94

此帖于 2008-07-23 11:33 AM 被 hzzhouqq 编辑.
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
回复时引用此帖
回复

书签

主题工具
显示模式

发帖规则
不可以发表新主题
不可以发表回复
不可以上传附件
不可以编辑自己的帖子

启用 BB 代码
论坛启用 表情符号
论坛启用 [IMG] 代码
论坛禁用 HTML 代码
Trackbacks are 启用
Pingbacks are 启用
Refbacks are 启用



所有时间均为格林尼治时间 +9。现在的时间是 02:02 PM


Powered by vBulletin® 版本 3.7.0
版权所有 ©2000 - 2008,Jelsoft Enterprises Ltd.
(C) Copy Right All Right Reserved 2001 - 2007

Search Engine Friendly URLs by vBSEO 3.1.0