TFindFileThe following example accumulates a list of all the files on any
drive which are in a particular directory and which match a name with
wildcards, for example, all files matching
\System\Fonts\*.gdr.
To do this, it uses TFindFile::FindWildByDir() to begin
the search and then uses TFindFile::FindWild() to continue the
search on the next drive.
To retrieve the fully qualified path of the matching files, class
TParse is used to combine the filename with the drive letter and
directory which contains the file.
void ForAllMatchingFiles(RFs& aSession, const TDesC& aWildName, const TDesC& aScanDir)
{
TFindFile file_finder(aSession); // 1
CDir* file_list; // 2
TInt err = file_finder.FindWildByDir(aWildName,aScanDir, file_list); // 3
while (err==KErrNone)
{
TInt i;
for (i=0; i<file_list->Count(); i++) // 4
{
TParse fullentry;
fullentry.Set((*file_list)[i].iName,& file_finder.File(),NULL); // 5,6,7
// Do something with the full EPOC filename
DoOneFile(aSession, fullentry.FullName()); // 8
}
delete file_list; // 9
err=file_finder.FindWild(file_list); // 10
}
}
1. Construct a TFindFile object.
2. FindWildByDir() sets file_list to NULL
before assigning values to it, so no memory should be allocated by the
caller.
3. This starts the search for matching files. There is considerable
flexibility in the handling of aWildName and
aScanDir, but the simplest and most common case is where
aWildName is the filename and extension (for example,
*.gdr) and aScanDir is the directory name, without a
drive letter but including a trailing directory separator (for example,
\System\Fonts\).
4. CDir is implemented using one of the EPOC array
classes, and Count() retrieves the number of items in the
list.
5. (*file_list)[i].iName is the name of a file
matching the pattern specified (e.g. Eon.gdr).
6. file_finder.File() retrieves the drive and path of
the folder containing the files in the CDir, (for example
Z:\System\Fonts\).
7. TParse::Set() combines these two components to form
a complete filename.
8. TParse::FullName() returns the full filename formed
in step 7. The DoOneFile() function can operate on the fully
specified filename, (it is assumed that DoOneFile() will need to
refer to the file server, so the RFs object is passed to
it).
9. FindWildByDir() and FindWildByPath()
both allocate the CDir object on your behalf and transfer
ownership to the caller. Note that it is your responsibility to delete the
CDir object when you have finished with it.
10. Finally, TFindFile::FindWild() continues the
search on the next drive in the search sequence.