by arthersophy
TBool CLaunchCamera::GetLastFile(TFileName & aFilePath)
{
RFs fs;
User::LeaveIfError(fs.Connect());
TInt count(0);
CDirScan* ds = CDirScan::NewLC(fs);
TRAPD(err,ds->SetScanDataL(aFilePath,KEntryAttNormal,ESortByName|EAscending,CDirScan::EScanDownTree));
if (err!=KErrNone)
{
CleanupStack::PopAndDestroy(ds);
fs.Close();
return EFalse;
}
CDir* c = NULL;
TFileName fullname;
while(1)
{
ds->NextL(c);
if (!c)
break;
for (TInt i=0; i <c->Count(); i++)
{
const TEntry e= (*c)[i];
fullname.Copy(ds->FullPath());
fullname.Append(e.iName);// 全路径:如:c:/data/images/hello.jpg
TParsePtrC p(fullname);
TBufC <KMaxPath> nameShort(p.NameAndExt()); // 文件名,没有路径
TTime timeNow = e.iModified;
if( timeNow > iForeverAllLastTime )
{
iLastNewFilePath.FillZ(KMaxFileName) ;
iLastNewFilePath =fullname ;
iNewFileName = nameShort;
CleanupStack::PopAndDestroy(ds);
fs.Close();
return ETrue;
}
}
delete c;
c=NULL;
}
CleanupStack::PopAndDestroy(ds);
fs.Close();
return EFalse;
}
by http://blog.sina.com.cn/s/blog_4a774f1e01009b80.html
RFs Fs;
User::LeaveIfError(Fs.Connect());
CDir *dir = NULL;
// 获取KPath下的文件和文件夹列表
User::LeaveIfError(Fs.GetDir(KPath,KEntryAttNormal|KEntryAttMatchMask,ESortNone,dir));
for (TInt i=0; i<dir->Count(); i++)
{
// 如果是文件夹,就将文件夹名称保存到iFolderlist
if ((*dir)[i].IsDir())
{
HBufC* foldername = (*dir)[i].iName.AllocL();
iFolderlist.AppendL(foldername);
}
}
delete dir;
dir = NULL;
Fs.Close();
iFolderlist.ResetAndDestroy();
注:
第一种方法在执行ds->NextL(c);时非常耗时,本人用N6670手机试过,当KPath下有340个左右的文件和文件夹时,耗时大概是15秒,而用第二种方法不到1秒,所以建议使用第二种方法.