安装时备份sis 【转】_GGGL_百度空间

转载自:

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上测试通过



郑重声明:资讯 【安装时备份sis 【转】_GGGL_百度空间】由 发布,版权归原作者及其所在单位,其原创性以及文中陈述文字和内容未经(企业库qiyeku.com)证实,请读者仅作参考,并请自行核实相关内容。若本文有侵犯到您的版权, 请你提供相关证明及申请并与我们联系(qiyeku # qq.com)或【在线投诉】,我们审核后将会尽快处理。
—— 相关资讯 ——