Symbian (Backup sis on installing)安装时备份SIS_Mark15021_新浪博客
说明:blog内容会和论坛www.devdiv.net保持同步更新

Symbian (Backup sis on installing)安装时备份SIS
备份自己是一个很有技巧的技术点
我{zx0}发现使用此技巧的是搜狗输入法
搜狗输入法有一个功能是可以用bluetooth共享给好友
后来调研了好久不知道如何做到的.

感谢陈子腾大神的总结
在这里也总结一下做个备忘

首先我们来看,安装文件的时候我们需要知道啥时候自己被安装了.
因为安装程序不允许多实力安装.也就是说同一时刻只能有一个安装
程序安装.

这样我们就可以在程序安装的时候得到自己的名字.然后再进行备份了.
那么如何知道自己被安装了呢.
TOpenFileScan可以枚举得到所有打开的文件.

 //下面是找到当前正在安装的名字
 RFs fs;
 TInt err = fs.Connect();
 User::LeaveIfError(err);
 CleanupClosePushL(fs);
 TFileName filename;
 TOpenFileScan ofs(fs);
 TBool done = EFalse;
 //枚举所有打开的文件
 while (!done)
    {
    CFileList* fl= NULL;
    ofs.NextL(fl);
    if (fl==NULL)
    {
    done = ETrue;
    }
    else
       {
        CleanupStack::PushL(fl);
        TInt count = fl->Count();
        for (TInt i= 0; (i<count)&&(!done); i++)
        {
        _LIT(KExtSis, ".sis");
        _LIT(KExtSisx, ".sisx");
        TEntry entry = (*fl)[i];
        TParsePtrC parse(entry.iName);
        //当前打开的文件后缀名为SIS的.把名字保存下来
        if ((parse.Ext()==KExtSis)||(parse.Ext()==KExtSisx))
            {
            filename = entry.iName;
            done = ETrue;
            }
            }
       CleanupStack::PopAndDestroy(fl);
      }
     }
///以上就可以找到已经安装的自己的名字了.

然后再让我们看看有哪些安装形式
1.数据线安装
2.蓝牙安装
3.安装SIS在手机上进行直接安装

我们先来看看以下安装的几种情况
1.数据线安装(PC套件会把SIS在手机上copy一份)
2.蓝牙安装(可以通过API取到附件中的SIS)
3.Copy到手机上直接安装(直接搜索可以找到)

让我们看如何处理
_LIT(KSisBackup, "c:\\data\\backup.sis");
if(filename!=KNullDesC)
{
    BaflUtils::EnsurePathExistsL(fs, KSisBackup);

    _LIT(KMessagingPrivateFolder, "\\private\\1000484b\\");
    _LIT(KPrivateFolder, "\\private\\");
    filename.LowerCase();
    if(filename.Find(KMessagingPrivateFolder)==0)
    {
    //在信息目录里.可以通过API取出附件中的文件
    // Messaging application's private folder
    // try to retrieve the message attachment
    CSmsHandler* sms = CSmsHandler::NewLC(); // need active scheduler
    sms->ExportInboxToFileL(fs, filename, KSisBackup);
    CleanupStack::PopAndDestroy(sms);
    }
    else if(filename.Find(KPrivateFolder)==0)
    {
    //在私有目录下.没有办法取得
        //如果SIS在私有目录下,就说明在安装的过程中只能通过其他程序
    //安装,如果通过其他程序安装
    // other private folder
    // no idea how to get the sis file
    }
    else//已经在手机上
    {

    _LIT(KDriveC, "c:");
    filename.Insert(0, KDriveC);
    // other folders
    TBool found = EFalse;
    TDriveList driveList;
    err = fs.DriveList(driveList);
    User::LeaveIfError(err);
    //查找所有盘符,取出路径
    for(TInt driveNumber=EDriveA; (driveNumber<EDriveZ)&&(!found); driveNumber++)
       {
        if (driveList[driveNumber])
        {
            TChar driveLetter;
            err = fs.DriveToChar(driveNumber,driveLetter);
            User::LeaveIfError(err);
            filename[0] = driveLetter;
            TEntry entry;
            err = fs.Entry(filename, entry);
            if(err==KErrNone)
            {
            err = fs.SetModified(filename, entry.iModified);
            if(err!=KErrNone) // KErrInUse, or KErrPermissionDenied if the file is in "\\resource\\"
               {
                found = ETrue;
               }
            }
        }
          }

    //找到后copy一份文件即可
    if(found)
    {
    err = BaflUtils::CopyFile(fs, filename, KSisBackup);
    User::LeaveIfError(err);
    }

以上代码在N95上测试通过
已投稿到:
郑重声明:资讯 【Symbian (Backup sis on installing)安装时备份SIS_Mark15021_新浪博客】由 发布,版权归原作者及其所在单位,其原创性以及文中陈述文字和内容未经(企业库qiyeku.com)证实,请读者仅作参考,并请自行核实相关内容。若本文有侵犯到您的版权, 请你提供相关证明及申请并与我们联系(qiyeku # qq.com)或【在线投诉】,我们审核后将会尽快处理。
—— 相关资讯 ——