TSS001072
设备, 软件 版本: S60 2nd Edition
S60 3rd Edition
S60 3rd Edition, FP1
S60 3rd Edition, FP2
详细描述
终端用户将会选择将程序安装到C盘(手机存储)或E盘(存储卡或内置硬盘)中。程序有时需要知道自己的安装位置,对程序安装位置的判断取决于S60平台的版本。
解决方案
S60第二版
在S60第二版中,使用aknutils.h中的CompleteWithAppPath(TDes& aFileName)方法。这个方法将返回给定一个描述符,内有所有需要的组成部分(盘符,路径,包括后缀的文件名)。任何缺少的部分(路径和盘符)将从应用程序路径
(<drive>:/system/apps/<application_name> )中获取
#include <aknutils.h>
// Insert the full application path into the file name (fileName)
TFileName fullPath(fileName);
CompleteWithAppPath(fullPath); // from aknutils.h
S60第三版
从S60第三版向后,所有二进制程序(Exe和Dll文件)都存储在/Sys/bin中。要访问这个目录,程序需要AllFiles能力。资源和数据是无法存入这个目录的。程序有自己的目录/private/<SID>/各自安放,这里SID是一个安全标识,每个程序都是独一无二的。程序通过这个私有目录存放.ini,.mbm,.rsc和数据文件。其他没有AllFiles能力的程序将无法访问它们。
在S60第三版上CompleteWithAppPath()方法将总是返回/sys/bin作为程序安装目录。如果要访问程序的私有目录中的数据,将要用另一个方法来获得路径:
TFileName appPath;
TBuf<2> appDrive;
// Returns private path of this application
// in following format: /Private/<SID of the application>/
// (does not contain drive specification).
iEikonEnv->FsSession().PrivatePath( appPath );
// Extract drive letter into appDrive
appDrive.Copy(iEikonEnv->EikAppUi()->Application()->AppFullName().Left(2));
// Insert drive letter into path
appPath.Insert(0, appDrive);