fstream中的readsome遇到的问题

今天用fstream中的readsome去读取文件到buffer中。碰到了bug.
因为不知道文件的大小,担心超出buffer的容量或者不足本以为用readsome是可以实现的,不过调试发现readsome
总是返回0,什么都没有读到。后来查了一下下面的资料
1.由一个Bug看ifstream中read()与readsome()的区别
http://www.softat.org/viewthread.php?tid=59086
2.输入流的读取方法read()、readsome()比较
http://www.cnblogs.com/kb/archive/2005/08/15/215346.html
 
具体说说自己理解的原因
在内存快的时候readsome和read是有着相同的效果的,所以在msdn中的readsome的例子一般都是使用了内存中的流
来实现,可是在文件中,文件流读取的时候首先要把文件从硬盘读取到一个内存中的buffer1)中,每一次调用
read或者readsome是从内存中读取数据

read和readsome的不同点在于,read每次读完内存后,如果还能往输出内存buffer2(2表示和1的区别)中写入,还会更新
buffer1(从文件中读取后输入到buffer1中),而readsome仅仅对buffer1中的数据进行读取。并不会刷新buffer1
所以我们可以看出在fstream中readsome的使用时不合适的
我们因该使用read,对于readsome中返回的值,我们可以在read后用gcount函数获得。具体代码如下
  ifstream doc_file_stream;
  doc_file_stream.open(
" c:/test.doc " ,::std::ios:: in );
  
char  buffer[ 1024 ];
  
  
do
  
{
    
if(doc_file_stream.bad())
    
{
      
break;
    }

    
int read_num = 0;
    
    doc_file_stream.read(buffer,
1023);
    read_num 
= doc_file_stream.gcount();
   buffer[read_num] 
= 0;
    
if(read_num > 0){
      cout 
<< buffer ;
    }

    
else{
      
break;
    }

  }

  
while ( true );
  doc_file_stream.close();
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值