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一一对应。