Symbian (Backup sis on installing)安装时备份SIS

Symbian (Backup sis on installing)安装时备份SIS
备份自己是一个很有技巧的技术点
我最先发现使用此技巧的是搜狗输入法
搜狗输入法有一个功能是可以用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上测试通过

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值