Symbian中ini檔案的使用

gudesheng發表於2008-01-03

原文地址:http://www.goodod.com/html/68/bencandy_9415.htm

如果程式中需要配置檔案(如儲存進度,聲音等)那可以使用ini檔案來處理,同MFC一樣也有專門處理配置檔案的API,這就是OpenIniFileLC(RFs& aFs)。

首要的一條,你的程度要支援ini檔案,那就要過載這個CEikApplication的成員函式,否則程式執行起來會報錯,而過載時只要如下語句即可:
CDictionaryStore* CMyApp::OpenIniFileLC(RFs& aFs) const

    return CEikApplication::OpenIniFileLC(aFs);
 }

這樣的話,程式可以在你啟動時自動的建立一個ini——如果檢測到沒有的情況下。而這個ini一般是建立在C:/System/App/MyApp目錄下的,注意即使使用者選擇安裝在E盤,那還是會把ini安裝在系統盤上,SDK說明這個預設碟符是放在KIniFileDrive裡,但我還沒有找到辦法如何去修改它,如果你知道了告訴我一聲哦:)

一般配製檔案要供全域性使用,可能要跨越多個view,因此我們把它的操作及資料定義在UI級別,在MyAppUi的ConstructL()函式中有如下語句:

//處理基本的資料
delete iMyConfig;
     iMyConfig = CMyConfigData::NewL();

CDictionaryStore* store = Application()->OpenIniFileLC(iCoeEnv->FsSession());
if (store->IsPresentL(KUidKey)) 

LoadIniFile(store);
} 
else 
{ 
iMyConfig->SetDefault();
SaveIniFile(store);

CleanupStack::PopAndDestroy();
//--結束處理

void CMyAppUi::SaveIniFile(CDictionaryStore* aStore)

RDictionaryWriteStream out;
out.AssignLC(*aStore, KUidKey);
out << *iMyConfig;
out.CommitL();
CleanupStack::PopAndDestroy();
aStore->CommitL();



void CAknExSettingListAppUi::LoadIniFile(CDictionaryStore* aStore)

RDictionaryReadStream in;
in.OpenLC(*aStore, KUidKey);
in >> *iMyConfig;
CleanupStack::PopAndDestroy();


當然具體的CMyConfigData裡還要有一些相應的匯入匯出處理,這樣才完美:)

有時候我們還需要在程式中處理一下配置的儲存,那我們可以使用如下程式碼(在view中):
CDictionaryStore *IniFile = AppUi()->Application()->OpenIniFileLC(CCoeEnv::Static()->FsSession());

RDictionaryWriteStream WriteStream;
WriteStream.AssignLC( *IniFile, KUidKey );
WriteStream << *iData;
WriteStream.CommitL();
CleanupStack::PopAndDestroy();

IniFile->CommitL();
CleanupStack::PopAndDestroy();
把它放在一個函式中即可:)

最後要說明的是,如果不在pkg裡有明確說明,那儲存在系統盤上的ini在程式被刪除後是不會丟失的,這就造成了垃圾檔案,我們只需要在pkg中加入下面一句就可以徹底刪除這些:
; Remove INI file when uninstalling the app.
""-"C:/system/apps/MyApp/MyApp.ini",FN
FN表明這個檔案在程式執行時才生成,現在為空。前面用的是“”。 

 

Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1449655


相關文章