文件夹的扫描和查找是我们经常要用到的技巧.
可能有的朋友会用得着.当然自己以后也会用的着.
在这里做一个备忘.让我们看是如何实现的吧.
void CStartScan(RFs& aFs,const TDesC& aFileName,const TDesC& aPath)
{
CDirScan* DirScan = CDirScan::NewL(aFs);//初始化扫描文件句柄
DirScan->SetScanDataL(aPath, KEntryAttMatchMask|KEntryAttMatchExclusive,
ESortByName, CDirScan::EScanDownTree);
//设置扫描的次序,以及扫描的路径还有选择扫描的属性
while(1)
{
CDir* dir = NULL;
TRAPD(error, DirScan->NextL(dir));//取文件夹
if (error || !dir) break;
GetFile(aFs,aFileName,DirScan->FullPath());
//在指定的文件夹中查找指定的文件.也可以模糊皮配
delete dir;
dir = NULL;
}
if(DirScan)
{
delete DirScan;
DirScan = NULL;
}
}
//在指定的文件夹中查找文件
//以下函数里查是指定目录下的图片
void GetFile(RFs& aFs,const TDesC& aFileName,const TDesC& aPath)
{
CDir* file_list;
TFindFile aFindFile(aFs);
TInt err = aFindFile.FindWildByDir(aFileName, aPath,file_list);
//这个用法挺用趣,Symbian专用哦
while (err==KErrNone)
{
for (TInt i=0; i<file_list->Count(); i++)
{
TEntry aEntry = (*file_list)[i];
TBuf<64> bufName;
bufName.Copy(aEntry.iName);
TInt err = bufName.FindF(_L(".jpg"));//查找JPG
if(err == KErrNotFound)
{
break;
}
else
{
err = bufName.FindF(_L(".png"));//PNG图片
if(err == KErrNotFound)
{
break;
}
else
{
err = bufName.FindF(_L(".gif"));//GIF图片
if(err == KErrNotFound)
{
break;
}
}
}//end else
TBuf<128>pathName;
pathName.Copy(aPath);
pathName.Append(aEntry.iName);
CEntry* eEntry = new (ELeave)CEntry();
eEntry->SetFileName(bufName);
eEntry->SetFilePath(pathName);
iAllPicture.Append(eEntry);
//保存取得的文件属性,比如文件名路径
}//end for
delete file_list;
file_list = NULL;
err = aFindFile.FindWild(file_list);
}
if (file_list)
{
delete file_list;
file_list = NULL;
}
}
以上代码在N95,N73测试通过