Symbian中操作ini文件

原文地址:http://blog.youkuaiyun.com/Symobile/archive/2006/04/29/696131.aspx

这两天在做东西时给这个操作ini文件的程序搞得郁闷死了,我的程序里要保存用户的数据,我就第一个就想到了ini配置文件,以为会跟windows平台一样的容易,直接拿系统提供的API就可以了事,找了半天,找不到,在网上查了一下,原来要自己解析的,郁闷了半天,看了示范,尝试去写着,老是出了N多的问题,后来终于写出来了,贴出来。。

SDK里有说到S60的程序默认不支持INI文件的操作,如果要让程序支持的话要重载OpenIniFileLC这个成员函数,我就重载了App的这个函数了,因为我的项目名叫Symbian2所以现在都会以Symbian2为示例的,首先我们要先重载,打开Symbian2App.h重载OpenIniFileLC

CDictionaryStore*OpenIniFileLC(RFs&aFs)const;

然后在实现代码里这样写

CDictionaryStore*CSymbian2App::OpenIniFileLC(RFs&aFs)const
{
returnCEikApplication::OpenIniFileLC(aFs);
}


重载好了,这样我们的程序就可以支持INI文件了,接下来我们要写专操作INI的函数了

我把这两个函数写进了Appui类里面了

voidCSymbian2AppUi::WriteIniFile(TUidiInfo,void*ptr,TUintsize)
{
TIntr;
RFsfs;
fs.Connect();
CleanupClosePushL(fs);
RDictionaryWriteStreamrdsIniFile;
CDictionaryStore*cdIniFile=Application()->OpenIniFileLC(fs);//如果不存在就创建
rdsIniFile.AssignLC(*cdIniFile,iInfo);
TPtr8buf((TUint8*)ptr,size,size);
TRAP(r,rdsIniFile.WriteL(buf));
rdsIniFile.CommitL();
CleanupStack::PopAndDestroy();
cdIniFile->CommitL();
CleanupStack::PopAndDestroy(2);
}


TBoolCSymbian2AppUi::ReadIniFile(TUidiInfo,void*ptr,TUint&size)
{
TIntr;
TBoolresult=EFalse;
RFsfs;
fs.Connect();
CleanupClosePushL(fs);
RDictionaryReadStreamrdsIniFile;
CDictionaryStore*cdIniFile=Application()->OpenIniFileLC(fs);
if(cdIniFile->IsPresentL(iInfo)){
rdsIniFile.OpenLC(*cdIniFile,iInfo);
TPtr8buf((TUint8*)ptr,size);
TRAP(r,rdsIniFile.ReadL(buf));
CleanupStack::PopAndDestroy();//rdsIniFile
result=ETrue;
}
CleanupStack::PopAndDestroy(2);//fs,cdIniFile
returnresult;
}

是不是没错得特乱,没关系,不用理,,我来给出两个调用例子你就会知道其实很容易

怎么实现调用呢?比如说写入配置吧,我们都是在最后退出时才写入配置的吧,那我们在CSymbian2AppUi::HandleCommandL的代码里去写。

caseEEikCmdExit:
{
_LIT(KBentionText,"bention");//定义文字常量相当于ini中的字段值
HBufC*str=KBentionText().AllocLC();//转换为HBUfC16位
TUintaInd=20;//定义要写入文本的长度
TUidtestuid={0x0bdf1365};//定义文本标识相当于ini中的字段名
WriteIniFile(testuid,str,aInd);//写入
Exit();
break;
}

运行后退出程序。你现在去C:\Symbian\8.0a\S60_2nd_FP2_SC\epoc32\wins\c\System\Apps\Symbian2
下面,是不是多出了一个Symbian2.ini文件呢,用ue打开,是不是发觉有了bention字样呢,这证明写入成功啦哈哈

至于读取配置的,也差不多只要你在适当地方用下面的代码就可以了。

HBufC*tstr;
TUintaInd=20;
TUidtestuid={0x0bdf1365};//注意此处与上面是相同的,这个相当于字段名,是一个标识
if(ReadIniFile(testuid,tstr,aInd)){//处时tstr为读出的字段值了
//做你想做的事
}


也许我在表达上有一定的错误,请大家多多指教

翁培铖 潮州新天地网络

转贴 自 http://www.bention.com

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值