一、文档类读写文件 在Symbian的GUI应用程序中,如果需要永久保存应用程序数据,框架可以自动启动该进程来保存数据。 文档类包含两个可以重写的重要函数:StroeL()和RestoreL()。在应用程序启动时,框架自动调用RestoreL()。然后,该函数负责加载应用程序数据。当应用程序退出时,为了保存应用程序数据,框架调用StoreL()函数—需要包括对SaveL()的调用,用于指示框架进行调用。 Series 60与其它的Symbian OS平台区别是:文档类的默认行为不是使用文件存储永久保存数据。因此,Series 60并不会在应用程序启动时自动打开用于文档保存的文件。CAknDocument::OpenFile()的实现为空。 不过,通过重写文档类中的OpenFile()函数,并调用基类实现,可以完成这种行为: CFileStore*CDocumentExampleDocument::OpenFileL(TBool aDoOpen,const TDesC& aFilename,RFs& aFs) { return CEikDocument::OpenFileL(aDoOpen, aFilename, aFs); } 在完成StroeL()和RestoreL()后,可以调用CAknDocument::SaveL()来实现数据的写入。
CDocumentExampleDocument* aDocument =
static_cast< CDocumentExampleDocument* > (AppUi()->Document() ); aDocument->SaveL(); 本部分参照《Series 60应用程序框架》一书。 二、ini文件读写 Series 60中并沒有默认提供对Symbian OS .ini文件的支持。为了允许应用程序使用.INI文件,必须重写应用程序类的OpenIniFileLC()函数,使其调用EikApplication:: OpenIniFileLC()。例如: CDictionaryStore* CDocumentExampleApplication::OpenIniFileLC(RFs& aFs) const { return CEikApplication::OpenIniFileLC(aFs); } 此时,运行应用程序,即会发现有ini文件产生。 在CDocumentExampleAppUi里写两个函数WriteIniFile、ReadIniFile,通过这两个函数可以读写ini文件。 void CDocumentExampleAppUi::WriteIniFile(TUid iInfo, TDes& aWrite) { 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 << aWrite; rdsIniFile.CommitL(); CleanupStack::PopAndDestroy(); cdIniFile->CommitL(); CleanupStack::PopAndDestroy(2); } TBool CDocumentExampleAppUi::ReadIniFile(TUid iInfo, TDes& aRead) { 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, size); // TRAP(r, rdsIniFile.ReadL(buf)); rdsIniFile >> aRead; CleanupStack::PopAndDestroy(); // rdsIniFile result = ETrue; } CleanupStack::PopAndDestroy( 2); // fs, cdIniFile return result; } 本部分参考了《Symbian中操作ini文件》一文。 总结,本文介绍了如何利用文档类读写数据文件以及如何读写ini文件,这两个文件的保存的地址为:C:\S60\devices\S60_3rd_FP2_SDK_v1.1\epoc32\winscw\c\private\eeddfaa4,其中eeddfaa4为应用程序的UID,C:\S60\devices\S60_3rd_FP2_SDK_v1.1为模拟器安装地址。源码下载地址