一、文档类读写文件
在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为模拟器安装地址。源码下载地址:http://download.csdn.net/source/858371。