热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();
文件流插入的操作
最新推荐文章于 2022-06-02 21:47:41 发布