文件流插入的操作

热1已有 40 次阅读  2010-03-30 14:20   标签:  文件 
一般用文件流的方式去读写文件,但文件指针是被设在文件的初始位置的,向六种写入内容会把现有的数据覆盖掉
为了避免这种情况的发生,要把文件指针指向文件末尾,可以通过MStreamBuf::SeekL()来达到这个目的。
如何实例MStreamBuf呢?RFileWriteStream有一个返回MStremBuf*的函数Sink(),RFileReadStream有一个返回MStreamBuf*的函数Source()
通过MStreamBuf将文件指针移到文件末尾
WriteStream.Sink()->SeekL(MStreamBuf::EWrite,EStreamEnd,0);
函数原型
inline TStreamPos SeekL(TMark aMark, TStreamLocation aLocation, TInt anOffset=0);
aMark标志着种类是write还是read,aLocation是计算新位置时流上的基准位置,EStreamBeginning基准位置在流的开头,EStreamEnd基准位置在流的结尾,EStreamMark计算新位置的基准在流中已存在的标记位置
 
检查文件结尾
通过MStreamBuf::SizeL()来获取文件的大小,通过MStreamBuf::TellL()来检查文件指针是否已经到达EOF
 
写文件
 RFileWriteStream filestream;
 User::LeaveIfError(filestream.Open(aFs,aFileName,EFileWrite));
 filestream.PushL();
 
 filestream.Sink()->SeekL(MStreamBuf::EWrite,EStreamEnd,0);
 
 filestream.WriteInt32L(value);
 //这句必须要加上 不然写不进去流中
 filestream.CommitL();
 CleanupStack::PopAndDestroy();
 
读文件
 RFileReadStream  fileread;
 User::LeaveIfError(fileread.Open(aFs,aFileName,EFileRead));
 fileread.PushL();
 //获得文件的大小
 TStreamPos eofpos(fileread.Source()->SizeL());
 TStreamPos currentPos(0);
 
 while(currentPos < eofpos)
  {
  TInt32 val;
  fileread >> val;
  iArray.Append(val);
  //获得当前流中读取的位置
  currentPos = fileread.Source()->TellL(MStreamBuf::ERead);
 
  }
 
 CleanupStack::PopAndDestroy();

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值