You Are Here:

Community: Wiki

This page was last modified on 5 April 2008, at 17:00.

Using ini files to store application's settings

From Forum Nokia Wiki

Contents

Introduction

Most applications need some way to store persistent data. In most cases, the use of ini files is the easiest way to achieve this. Here's a simple setting class providing both loading and storing methods.

Settings.h

#ifndef SETTINGS_H
#define SETTINGS_H
 
#include <e32base.h> // CBase
#include <e32def.h> // TBool
 
class CApaApplication;
 
class CSettings : public CBase
{
public:
CSettings(CApaApplication& aApp);
void ConstructL();
 
void LoadL();
void StoreL();
 
public:
TBool iStartOnBackground;
// Other settings...
 
private:
CApaApplication& iApp;
};
 
#endif

Settings.cpp

And the class implementation could be something like this:

#include "Settings.h"
#include "YourApp.h"
 
#include <coemain.h> // CCoeEnv
#include <s32stor.h> // CDictionaryStore
 
CSettings::CSettings(CApaApplication& aApp) : iApp(aApp)
{}
 
void CSettings::ConstructL()
{
LoadL();
}
 
void CSettings::LoadL()
{
CDictionaryStore* iniFile = iApp.OpenIniFileLC(CCoeEnv::Static()->FsSession());
 
if (iniFile->IsPresentL(KYourAppUid))
{
RDictionaryReadStream readStream;
readStream.OpenLC(*iniFile, KYourAppUid);
 
TUint16 version = static_cast<TUint16> (readStream.ReadUint16L());
 
iStartOnBackground = static_cast<TBool> (readStream.ReadInt8L());
// Initialize other settings
 
CleanupStack::PopAndDestroy(&readStream);
}
else
{
// ini doesn't exist, so use default values
iStartOnBackground = EFalse;
}
 
CleanupStack::PopAndDestroy(iniFile);
}
 
void CSettings::StoreL()
{
CDictionaryStore* iniFile = iApp.OpenIniFileLC(CCoeEnv::Static()->FsSession());
RDictionaryWriteStream writeStream;
writeStream.AssignLC(*iniFile, KYourAppUid);
 
// You may support some simple versioning if you wish
writeStream.WriteInt16L(KYourAppVersion);
 
writeStream.WriteInt8L(iStartOnBackground);
 
writeStream.CommitL();
iniFile->CommitL();
CleanupStack::PopAndDestroy(2, iniFile);
}

YourApp.cpp

You should keep in mind to override your Application's OpenIniFileLC(), as some frameworks (Avkon for instance) disable ini file creation by default.

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

Your Document.cpp

A good place to instantiate your setting class could be in your Document or AppUi classes:

void CYourAppDocument::ConstructL()
{
// Load settings from ini file
iSettings = new(ELeave) CSettings(*Application());
iSettings->ConstructL();
}
 
CYourAppDocument::~CYourAppDocument()
{
delete iSettings;
}

Other Related Topics

Using .ini Files

RDictionaryReadStream

RDictionaryWriteStream

Rate This

 
Bookmark this page: DeliciousDiggFacebookGoogleYahooStumbleUponRedditDiigoTechnocratiTwitter  Share this page Share this page Print this Page Print this page Invite a friend Invite a friend
京ICP备05048969号    Email Newsletters Press Terms & Conditions Privacy Policy Sitemap Contact Us © 2009 Nokia 
RDF Facets: qdcZidentifierQSxhttpE3aE2fE2fwikiE2eforumE2enokiaE2ecomE2findeE78E2ephpE2fGuaranaUIE2dE44ocumentationX qdcZtypeQUqfnZE45E78cludedFromGeneralE4cistingsQ qdcZtypeQUqfntypeZCommunityContentQ qdcZtypeQUqfntypeZE52esourceQ qdcZtypeQUqfntypeZWebpageQ qdcZtypeQUqfntypeZWikiContentQ qdcZtypeQUqmarsZManagedE52esourceQ qdcZtypeQUqwebZInformationE52esourceQ qdcZtypeQUqwebZPageQ qdcZtypeQUqwebZE52esourceQ qdcZtypeQUqrdfsZE52esourceQ qfnZtypeQUqfntypeZCommunityContentQ qfnZtypeQUqfntypeZE52esourceQ qfnZtypeQUqfntypeZWebpageQ qfnZtypeQUqfntypeZWikiContentQ qmarsZlanguageQUxhttpE3aE2fE2fswE2enokiaE2ecomE2flanguageE2d1E2fenX qrdfZtypeQUqfnZE45E78cludedFromGeneralE4cistingsQ qrdfZtypeQUqfntypeZCommunityContentQ qrdfZtypeQUqfntypeZE52esourceQ qrdfZtypeQUqfntypeZWebpageQ qrdfZtypeQUqfntypeZWikiContentQ qrdfZtypeQUqmarsZManagedE52esourceQ qrdfZtypeQUqwebZInformationE52esourceQ qrdfZtypeQUqwebZPageQ qrdfZtypeQUqwebZE52esourceQ qrdfZtypeQUqrdfsZE52esourceQ