博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
基于回合制的在线棋类对战游戏(图)
阅读量:4189 次
发布时间:2019-05-26

本文共 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

你可能感兴趣的文章
华为Mate 40工程机曝光:并未采用屏下摄像头
查看>>
腾讯再回应被骗,悬赏1000瓶老干妈求线索!老干妈:腾讯从来没有催收过
查看>>
拼多多组织架构大变动:黄峥不再担任公司CEO
查看>>
贾跃亭:个人破产重组完成 不再持有FF股权
查看>>
微信又更新了,“拍一拍”玩法升级...
查看>>
我们采访了小鹏G3「高温抑菌」项目负责人,发现智能车OTA并不简单
查看>>
特斯拉CEO马斯克再卖4套房 挂牌价6250万美元
查看>>
华为两款千元5G手机发布,5G市场快挤不下了!
查看>>
瑞幸咖啡:陆正耀继续担任董事和董事长
查看>>
神州租车再现新买家 上汽拟以19亿港元拿下近29%股权
查看>>
联想拯救者电竞手机新特性确认:有望搭载双X轴线性马达
查看>>
腾讯云与阿里云竞争激烈:销售团队积极争取每一笔交易
查看>>
又一个直播平台走到终点?官网无法访问疑似停服,主播讨要薪资
查看>>
梅耶·马斯克对话邓文迪 直播首秀将上线今日头条、抖音
查看>>
华谊兄弟:拟向阿里影业、腾讯等发行不超8.2亿股股票
查看>>
格力回应被中国移动取消中标资格:系投标人员整理材料失误
查看>>
苏宁官方辟谣“员工猝死”:因个人身体原因晕倒
查看>>
5G第一个演进版本标准完成 3GPP宣布R16标准冻结
查看>>
美团最好战的那个男人要走了
查看>>
企业数据云公司Cloudera发布CDP私有云,完善整套企业数据云愿景
查看>>