分享一位大神的Symbian全盘扫描

void CsoftmgrAllSisView::ScanMC()
{
RFs &fs = CEikonEnv::Static()->FsSession();
CDir *dir = NULL;
TPath path;
RPointerArray<CDir> *dirList = new (ELeave) RPointerArray<CDir> (5);
RArray<TPath> pathList(5);
_LIT(KE , "E:") ;
_LIT(Kgg , "//") ;
path = KE;
path.Append(Kgg);
pathList.AppendL(path);   //把路径添加到数组中
TInt err = fs.GetDir(path, KEntryAttMaskSupported, ESortNone, dir);
dirList->Append(dir);
TInt count = 0 ;
TInt itemCount = 0 ; //item的数目用来标记每一个item是在itemlist的第几个位置
if (err == KErrNone)
   {
   while (dirList->Count() != 0)
    {
    count = (*dirList)[0]->Count() ;
    for(TInt i = 0 ; i < count ; ++i)
     {
     path.Zero() ;
     const TEntry &entry = (*((*dirList)[0]))[i];
     { //构造path
      path.Append(pathList[0]) ;
      path.Append(entry.iName) ;
      path.Append(Kgg) ;
     }
     TInt err = fs.GetDir(path , KEntryAttMaskSupported , ESortNone , dir) ;
     if(err == KErrNone)
      {
      dirList->Append(dir) ;
      pathList.Append(path) ;
      }
     else if(!entry.IsDir() && entry.iName.Right(5).CompareF(KSisFormat()) == 0) //sisx
      {
      CSisItem::FormatPath(path) ; //格式化path
      CSisItem *sisItem = CSisItem::NewL(path,
        entry.iName, itemCount++,
        ESisItemNotSelected, ENull);
      theAppUi->iEngine->Append(*sisItem);
      }
     }
    dirList->Remove(0) ;
    pathList.Remove(0) ;
    }
   }
}
 
 
文件目录可以看成一颗不规则的数

我们定义两个数组,一个装载着节点,一个装节点路径

没次循环一层删除第一个节点,(比如我现在在扫描根目录,扫描完根目录后会把根目录的dir从dirList中删除)同时为了构造path也要为path建立一个数组和dirList中的dir一一对应。

 

你可能感兴趣的:(Path,Symbian)