本文共 2376 字,大约阅读时间需要 7 分钟。
原文地址:http://blog.csdn.net/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 { return CEikApplication::OpenIniFileLC(aFs); } 重载好了,这样我们的程序就可以支持INI文件了,接下来我们要写专操作INI的函数了 我把这两个函数写进了Appui类里面了void CSymbian2AppUi::WriteIniFile(TUid iInfo, void *ptr, TUint size) { TInt r; RFs fs; fs.Connect(); CleanupClosePushL(fs); RDictionaryWriteStream rdsIniFile; CDictionaryStore *cdIniFile = Application()->OpenIniFileLC(fs);//如果不存在就创建 rdsIniFile.AssignLC(*cdIniFile, iInfo); TPtr8 buf((TUint8*)ptr, size, size); TRAP(r, rdsIniFile.WriteL(buf)); rdsIniFile.CommitL(); CleanupStack::PopAndDestroy(); cdIniFile->CommitL(); CleanupStack::PopAndDestroy( 2 ); } TBool CSymbian2AppUi::ReadIniFile(TUid iInfo, void *ptr, TUint &size) { TInt r; TBool result = EFalse; RFs fs; fs.Connect(); CleanupClosePushL( fs ); RDictionaryReadStream rdsIniFile; CDictionaryStore *cdIniFile = Application()->OpenIniFileLC(fs); if (cdIniFile->IsPresentL(iInfo)){ rdsIniFile.OpenLC(*cdIniFile, iInfo); TPtr8 buf((TUint8*)ptr, size); TRAP(r, rdsIniFile.ReadL(buf)); CleanupStack::PopAndDestroy(); // rdsIniFile result = ETrue; } CleanupStack::PopAndDestroy( 2 ); // fs, cdIniFile return result; } 是不是没错得特乱,没关系,不用理,,我来给出两个调用例子你就会知道其实很容易怎么实现调用呢?比如说写入配置吧,我们都是在最后退出时才写入配置的吧,那我们在 CSymbian2AppUi::HandleCommandL的代码里去写。case EEikCmdExit: { _LIT(KBentionText,"bention");//定义文字常量 相当于ini中的字段值 HBufC* str=KBentionText().AllocLC();//转换为HBUfC16位 TUint aInd=20;//定义要写入文本的长度 TUid testuid={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;TUint aInd=20;TUid testuid={0x0bdf1365};//注意此处与上面是相同的,这个相当于字段名,是一个标识if (ReadIniFile(testuid,tstr,aInd)) { //处时tstr为读出的字段值了//做你想做的事 }也许我在表达上有一定的错误,请大家多多指教翁培铖 潮州新天地网络
转贴 自
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1448656