fileexamappui.cpp
来自「国内著名嵌入式培训机构内部资料,内含一些实例代码,包括技术专题书籍」· C++ 代码 · 共 536 行
CPP
536 行
/*
============================================================================
Name : FileExamAppUi.cpp
Author : hou maoqing
Copyright : Copyright (c) Hou maoqing 2008
Description : CFileExamAppUi implementation
============================================================================
*/
// INCLUDE FILES
#include <avkon.hrh>
#include <aknmessagequerydialog.h>
#include <aknnotewrappers.h>
#include <stringloader.h>
#include <f32file.h>
#include <s32file.h>
#include <hlplch.h>
#include <FileExam_0xEC439938.rsg>
#include "FileExam_0xEC439938.hlp.hrh"
#include "FileExam.hrh"
#include "FileExam.pan"
#include "FileExamApplication.h"
#include "FileExamAppUi.h"
#include "FileExamAppView.h"
_LIT(KFileName, "C:\\private\\EC439938\\FileExam.txt");
_LIT(KText, "Hello World!");
// ============================ MEMBER FUNCTIONS ===============================
// -----------------------------------------------------------------------------
// CFileExamAppUi::ConstructL()
// Symbian 2nd phase constructor can leave.
// -----------------------------------------------------------------------------
//
void CFileExamAppUi::ConstructL()
{
// Initialise app UI with standard value.
BaseConstructL(CAknAppUi::EAknEnableSkin);
// Create view object
iAppView = CFileExamAppView::NewL(ClientRect() );
// Create a file to write the text to
TInt err = CCoeEnv::Static()->FsSession().MkDirAll(KFileName);
if ( (KErrNone != err) && (KErrAlreadyExists != err))
{
return;
}
RFile file;
err = file.Replace(CCoeEnv::Static()->FsSession(), KFileName, EFileWrite);
CleanupClosePushL(file);
if (KErrNone != err)
{
CleanupStack::PopAndDestroy(1); // file
return;
}
RFileWriteStream outputFileStream(file);
CleanupClosePushL(outputFileStream);
outputFileStream << KText;
CleanupStack::PopAndDestroy(2); // outputFileStream, file
}
// -----------------------------------------------------------------------------
// CFileExamAppUi::CFileExamAppUi()
// C++ default constructor can NOT contain any code, that might leave.
// -----------------------------------------------------------------------------
//
CFileExamAppUi::CFileExamAppUi()
{
// No implementation required
}
// -----------------------------------------------------------------------------
// CFileExamAppUi::~CFileExamAppUi()
// Destructor.
// -----------------------------------------------------------------------------
//
CFileExamAppUi::~CFileExamAppUi()
{
if (iAppView)
{
delete iAppView;
iAppView = NULL;
}
}
// -----------------------------------------------------------------------------
// CFileExamAppUi::HandleCommandL()
// Takes care of command handling.
// -----------------------------------------------------------------------------
//
void CFileExamAppUi::HandleCommandL(TInt aCommand)
{
switch (aCommand)
{
case EEikCmdExit:
case EAknSoftkeyExit:
Exit();
break;
case EFileSessionPath:
this->ExamSessionPath();
break;
case EFileOperation:
this->ExamFileOperation();
break;
case EDirectoryOperation:
this->ExamDirectoryOperation();
break;
case EGetDirOperation:
this->ExamGetDirOperation();
break;
case EFileReadWriteOperation:
this->ExamFileReadWriteOperation();
break;
case EStreamReadWrite:
this->ExamStreamReadWriteOperation();
break;
case ECommand1:
{
// Load a string from the resource file and display it
HBufC* textResource = StringLoader::LoadLC(R_COMMAND1_TEXT);
CAknInformationNote* informationNote;
informationNote = new ( ELeave ) CAknInformationNote;
// Show the information Note with
// textResource loaded with StringLoader.
informationNote->ExecuteLD( *textResource);
// Pop HBuf from CleanUpStack and Destroy it.
CleanupStack::PopAndDestroy(textResource);
}
break;
case ECommand2:
{
RFile rFile;
//Open file where the stream text is
User::LeaveIfError(rFile.Open(CCoeEnv::Static()->FsSession(), KFileName, EFileStreamText));//EFileShareReadersOnly));// EFileStreamText));
CleanupClosePushL(rFile);
// copy stream from file to RFileStream object
RFileReadStream inputFileStream(rFile);
CleanupClosePushL(inputFileStream);
// HBufC descriptor is created from the RFileStream object.
HBufC* fileData = HBufC::NewLC(inputFileStream, 32);
CAknInformationNote* informationNote;
informationNote = new ( ELeave ) CAknInformationNote;
// Show the information Note
informationNote->ExecuteLD( *fileData);
// Pop loaded resources from the cleanup stack
CleanupStack::PopAndDestroy(3); // filedata, inputFileStream, rFile
}
break;
case EHelp:
{
CArrayFix<TCoeHelpContext>* buf = CCoeAppUi::AppHelpContextL();
HlpLauncher::LaunchHelpApplicationL(iEikonEnv->WsSession(), buf);
}
break;
case EAbout:
{
CAknMessageQueryDialog* dlg = new (ELeave)CAknMessageQueryDialog();
dlg->PrepareLC(R_ABOUT_QUERY_DIALOG);
HBufC* title = iEikonEnv->AllocReadResourceLC(R_ABOUT_DIALOG_TITLE);
dlg->QueryHeading()->SetTextL(*title);
CleanupStack::PopAndDestroy(); //title
HBufC* msg = iEikonEnv->AllocReadResourceLC(R_ABOUT_DIALOG_TEXT);
dlg->SetMessageTextL(*msg);
CleanupStack::PopAndDestroy(); //msg
dlg->RunLD();
}
break;
default:
Panic(EFileExamUi);
break;
}
}
// -----------------------------------------------------------------------------
// Called by the framework when the application status pane
// size is changed. Passes the new client rectangle to the
// AppView
// -----------------------------------------------------------------------------
//
void CFileExamAppUi::HandleStatusPaneSizeChange()
{
iAppView->SetRect(ClientRect() );
}
CArrayFix<TCoeHelpContext>* CFileExamAppUi::HelpContextL() const
{
#warning "Please see comment about help and UID3..."
// Note: Help will not work if the application uid3 is not in the
// protected range. The default uid3 range for projects created
// from this template (0xE0000000 - 0xEFFFFFFF) are not in the protected range so that they
// can be self signed and installed on the device during testing.
// Once you get your official uid3 from Symbian Ltd. and find/replace
// all occurrences of uid3 in your project, the context help will
// work.
CArrayFixFlat<TCoeHelpContext>* array = new(ELeave)CArrayFixFlat<TCoeHelpContext>(1);
CleanupStack::PushL(array);
array->AppendL(TCoeHelpContext(KUidFileExamApp, KGeneral_Information));
CleanupStack::Pop(array);
return array;
}
void CFileExamAppUi::ExamSessionPath()
{
TFileName sessionPath;
RFs& fs=CCoeEnv::Static()->FsSession();
fs.SessionPath(sessionPath);
RDebug::Print(_L("Current SessionPaht:%S\n"),&sessionPath);
TFileName newSessionPath;
newSessionPath.Copy(_L("c:\\"));
fs.SetSessionPath(newSessionPath);
fs.SessionPath(sessionPath);
RDebug::Print(_L("New Current SessionPaht:%S\n"),&sessionPath);
}
void CFileExamAppUi::ExamFileOperation()
{
if(0)
{
//文件改名
TFileName fnNew;
TFileName fnOld;
fnOld.Copy(_L("c:\\Data\\Others\\dir1\\1.txt"));
fnNew.Copy(_L("c:\\Data\\Others\\dir1\\2.txt"));
RFs& fs=CCoeEnv::Static()->FsSession();
TInt nRes=fs.Rename(fnOld,fnNew);
if(nRes != KErrNone)
{
//做错误处理
}
}
if(0)
{
//文件移动
TFileName fnNew;
TFileName fnOld;
fnOld.Copy(_L("c:\\Data\\Others\\dir1\\3.txt"));
fnNew.Copy(_L("c:\\Data\\Others\\dir2\\3.txt"));
RFs& fs=CCoeEnv::Static()->FsSession();
fs.Rename(fnOld,fnNew);
}
if(0)
{
//删除文件
TFileName fnNew;
fnNew.Copy(_L("c:\\Data\\Others\\dir2\\3.txt"));
RFs& fs=CCoeEnv::Static()->FsSession();
fs.Delete(fnNew);
}
if(1)
{
//文件名解析
TFileName fnNew;
fnNew.Copy(_L("c:\\Data\\Others\\demo.txt"));
TParse fp;
RFs& fs=CCoeEnv::Static()->FsSession();
fs.Parse(fnNew,fp);
RDebug::Print(_L("Driver: %S\n"),&(fp.Drive()));
RDebug::Print(_L("Path: %S\n"),&(fp.Path()));
RDebug::Print(_L("FileName: %S\n"),&(fp.Name()));
RDebug::Print(_L("FileExt: %S\n"),&(fp.Ext()));
}
}
void CFileExamAppUi::ExamDirectoryOperation()
{
if(1)
{
//创建单级目录
TFileName fnPath,fnPath2;
fnPath.Copy(_L("c:\\Data\\Others\\dir5\\"));
fnPath2.Copy(_L("c:\\Data\\Others\\dir5\\dir511\\"));
RFs& fs=CCoeEnv::Static()->FsSession();
TInt n1=fs.MkDir(fnPath);
TInt n2=fs.MkDir(fnPath2);
}
if(0)
{
//创建多级目录
TFileName fnPath;
fnPath.Copy(_L("c:\\Data\\Others\\dir6\\dir61\\dir611\\"));
RFs& fs=CCoeEnv::Static()->FsSession();
TInt n1=fs.MkDirAll(fnPath);
}
if(1)
{
//删除目录
TFileName fnPath;
fnPath.Copy(_L("c:\\Data\\Others\\dir6\\dir61\\dir611\\"));
RFs& fs=CCoeEnv::Static()->FsSession();
fs.RmDir(fnPath);
}
}
void CFileExamAppUi::ExamGetDirOperation()
{
if(1)
{
//获得指定目录下子目录和文件列表
TFileName fnPath;
fnPath.Copy(_L("c:\\Data\\"));
RFs& fs=CCoeEnv::Static()->FsSession();
CDir* pDir=NULL;
TInt nn=fs.GetDir(fnPath,KEntryAttNormal|KEntryAttMatchMask,ESortByDate,pDir);
for(int i=0;i<pDir->Count();i++)
{
RDebug::Print(_L("%S\n"),&((*pDir)[i].iName));
}
delete pDir;
}
if(0)
{
//获得指定目录下子目录、文件列表,文件和目录分开存放
TFileName fnPath;
fnPath.Copy(_L("c:\\Data\\"));
RFs& fs=CCoeEnv::Static()->FsSession();
CDir* pDir=NULL,*pFile=NULL;
TInt nn=fs.GetDir(fnPath,KEntryAttNormal,ESortByDate,pFile,pDir);
for(int i=0;i<pDir->Count();i++)
{
RDebug::Print(_L("Dir: %S\n"),&((*pDir)[i].iName));
}
for(int i=0;i<pFile->Count();i++)
{
RDebug::Print(_L("File: %S\n"),&((*pFile)[i].iName));
}
delete pDir;
delete pFile;
}
}
void CFileExamAppUi::ExamFileReadWriteOperation()
{
if(1)
{
//创建文件
TFileName fnDataFile;
fnDataFile.Copy(_L("c:\\Data\\FileExam.dat"));
RFs& fs=CCoeEnv::Static()->FsSession();
RFile file;
//file.Create(fs,fnDataFile,EFileWrite);
file.Replace(fs,fnDataFile,EFileWrite);
//写数据到文件中
TInt nID;
TBuf<20> bufName;
TInt nNameLen;
nID=10;
bufName.Append(_L("John"));
nNameLen=bufName.Length();
TPtrC8 ptrID((TUint8*)(&nID),sizeof(TInt));
TPtrC8 ptrName((TUint8*)bufName.Ptr(),bufName.Size());
TPtrC8 ptrNameLen((TUint8*)(&nNameLen),sizeof(TInt));
file.Write(ptrID);
file.Write(ptrNameLen);
file.Write(ptrName);
/*HBufC8* pName=HBufC8::NewL(bufName.Length());
TPtr8 ptr8Name=pName->Des();
ptr8Name.Copy(bufName);
file.Write(ptr8Name);*/
file.Close();
}
if(1)
{
//打开文件
TFileName fnDataFile;
fnDataFile.Copy(_L("c:\\Data\\FileExam.dat"));
RFs& fs=CCoeEnv::Static()->FsSession();
RFile file;
file.Open(fs,fnDataFile,EFileRead | EFileWrite);
//从文件中读数据
TInt nID;
TBuf<20> bufName;
TInt nNameLen;
TPtr8 ptrID((TUint8*)(&nID),sizeof(TInt));
TPtr8 ptrName((TUint8*)bufName.Ptr(),20*2);
TPtr8 ptrNameLen((TUint8*)(&nNameLen),sizeof(TInt));
file.Read(ptrID);
file.Read(ptrNameLen);
file.Read(ptrName,nNameLen*2);
bufName.SetLength(nNameLen);
RDebug::Print(_L("ID=%d Name=%S"),nID,&bufName);
RWriteStream ts;
file.Close();
}
}
class TUserGroup
{
public:
TInt32 m_nGroupID;
TBuf16<20> m_bufGroupName;
void ExternalizeL(RWriteStream& aStream) const;
void InternalizeL(RReadStream& aStream);
};
void TUserGroup::ExternalizeL(RWriteStream& aStream) const
{
aStream << m_nGroupID;
aStream << m_bufGroupName;
}
void TUserGroup::InternalizeL(RReadStream& aStream)
{
aStream >> m_nGroupID;
aStream >> m_bufGroupName;
}
void CFileExamAppUi::ExamStreamReadWriteOperation()
{
if(1)
{
//创建流式文件
TFileName fnDataFile;
fnDataFile.Copy(_L("c:\\Data\\StreamExam.dat"));
RFs& fs=CCoeEnv::Static()->FsSession();
RFileWriteStream fileWriteStream;
//User::LeaveIfError(fileWriteStream.Create(fs,fnDataFile,EFileWrite));
User::LeaveIfError(fileWriteStream.Replace(fs,fnDataFile,EFileWrite));
fileWriteStream.PushL();
//外部化数据到文件中
TInt32 nID;
TBuf16<20> bufName;
nID=10;
bufName.Append(_L("John"));
fileWriteStream << nID;
fileWriteStream << bufName;
//外部化存储自定义类
TUserGroup userGroup;
userGroup.m_nGroupID=50;
userGroup.m_bufGroupName.Copy(_L("beijing"));
fileWriteStream << userGroup;
//提交更改、释放资源
fileWriteStream.CommitL();
fileWriteStream.Pop();
fileWriteStream.Release();
}
if(1)
{
//打开流式文件
TFileName fnDataFile;
fnDataFile.Copy(_L("c:\\Data\\StreamExam.dat"));
RFs& fs=CCoeEnv::Static()->FsSession();
RFileReadStream fileReadStream;
User::LeaveIfError(fileReadStream.Open(fs,fnDataFile,EFileRead));
fileReadStream.PushL();
//从文件中内部化数据
TInt32 nID;
TBuf16<20> bufName;
fileReadStream >> nID;
fileReadStream >> bufName;
RDebug::Print(_L("ID=%d Name=%S"),nID,&bufName);
//内部化自定义类
TUserGroup userGroup;
fileReadStream >> userGroup;
RDebug::Print(_L("GroupID=%d GroupName=%S"),userGroup.m_nGroupID,&(userGroup.m_bufGroupName));
//释放资源
fileReadStream.Pop();
fileReadStream.Release();
}
}
// End of File
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?