使用ini文件

每个Symbian OS 应用程序都可以有一个.ini文件,该文件通常用于保存应用程序的初始化设置。

     INI文件可以被当做普通的文件处理,但是为了方便使用,Symbian OS 应用程序框架中的应用程序类CEikApplication为访问INI文件提供了内置的支持。该类中的OpenIniFileLC()函数可以打开默认的INI文件,定义如下:

    CDictionaryStore* OpenIniFileLC(RFs& aFs) Const;

     如果应用程序的名称是appname,默认的INI文件的路径时c:/system/apps/appname/appname.ini。

    OpenIniFileLC()函数的返回值是一个指向CDictionaryStory对象的指针,可以将该指针理解成INI文件的指针。Symbian OS 的文件访问机制中有一个存储的概念,可以简单的理解成流的集合,它用于处理一些更复杂的文件访问需求。CDictionaryStory类是存储类中比较简单的一种,该类可以包含一个或多个流,每个流靠一个UID和一个流ID标识。

需要重写这个函数,否则会报,功能不支持错误!

CDictionaryStore* CDolphinRadioS3Application::OpenIniFileLC(RFs& aFs) const
{
    return CEikApplication::OpenIniFileLC(aFs);
}

 

    选取UID,常用的做法是枚举定义

   enum TIniFileData

{

     EData1 = 1;

      EData2

};

     选用UID时,使用TUid::Uid(EData1)就可以获得一个UID值。向INI文件中写数据时,使用的是RDictionaryWriteStream类,该类是RWriteStream类的一个派生类。其中AssignLC()函数可以通过INI文件的指针和一个UID值获得INI文件中的一个流,向这个流中写数据时的操作与使用RWriteSteam类时一致。如果需要向INI文件写入多个数据项,可以为每个数据项建立一个流,代码如下:

     void CMyAppUi::StoreL()

              {

                   //调用Application类的OpenIniFileLC()函数获得INI文件的指针

                 CDictionaryStore* iniFile = Application()->OpenIniFileLC(iCoeEnv->FsSession());

                //向INI文件写入一个TInt64类型的整数

                RDictionaryWriteStream writeStream;

               //使用AssignLC()函数,在INI文件中打开或新建一个Stream

                 writeStream.AssignLC(*iniFile,TUid::Uid(EData1));

                TInt64 integer(1234);

                //使用操作符<<写入数据

                writeStream << integer;

              writeStream.CommitL();

               //向INI文件中写入一个字符串

              RDictionary WriteStream writeStream2;

               //使用AssignLC()函数,在INI文件中打开或新建一个Stream

              writeStream2.AssignLC(*iniFile,TUid::(EData2));

                _LIT(KSampleText,"Hello World");

              TBuf<32> str = KSampleText;

              writeStream2 << str;

              writeStream2.CommitL();

               //最后将Stream中的数据写入INI文件

              iniFile->CommitL();

              //弹出已经压入清除栈的变量:iniFile,writeStream,writeStream2

                CleanupStack::PopAndDestroy(3);

               iniFile = NULL;

              }

       从INI文件中读取数据的过程与写入数据的过程类似,这里需要使用RDictionaryReadStream类,该类是RReadStream的派生类。该类的OpenLC()函数通过INI文件的指针和UID的值打开UID对应的流,之后使用RReadStream类的函数读取流中的值。使用CDictionaryStore类时,可以根据不同的UID值获得不同流的指针,因此读写INI文件中的数据时可以补按照特定的顺序。例如:

       void CMyAppUi::RestoreL()

                {

                 CDictionaryStore* iniFile=Application()->OpenIniFileLC(iCoeEnv->FsSession);

                 //读取INI文件中字符串的值

                 RDictionaryReadSteam readStream;

                //使用OpenLC()函数,通过UID获得该UID对应的Stream

                 readStream.OpenLC(*iniFile,TUid::Uid(EData2));

                 TBuf<32> str;

                 readStream >>str;

                //读取整型值

                 RDictionaryReadStream readStream2;

                 readStream2.OpenLC(*iniFile,TUid::Uid(EData1));

                 TInt64 a;

                 readStream2>>a;

                 //弹出已经压入清除栈的变量:iniFile,readStream,readStream2

                 CleanupStack::PopAndDestroy(3);

                  iniFile=NULL;

                 }

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值