CFileFind to perform a file search starting from a directory and
including optionally it's subdirectories in the search.
- A list of file paths is mantained internally.
- If we make use of the callback mechanism, new found file paths can be obtained immediatly.
- The class allows not only searches based on a file mask but also on the file size, file dates,
text contents and file attributes.
int FindFiles(LPCTSTR szBaseFolder, LPCTSTR szFileMask, BOOL bSubFolders = FALSE)
Search for files which match the mask
szFileMask. This file mask can include one or more wildcard characters (* and ?)
int Find(CFileFinder::CFindOpts &opts)
Find files matching the conditions established in the
CFindOpts class parameter (See explanation of
BOOL FindTextInFile(LPCTSTR szFile, LPCTSTR szText)
TRUE if the text
szText was found in the file
szFile. It's internally used by the
It's declared public to allow applications make use of this functionality.
Return the count of items found up to the moment the call is performed or the total of files found in the
CPath GetFilePath(int nIndex)
CPath object with the required file index path. In the
CPath class there are two useful operators
operator LPCTSTR () and
operator = (LPCTSTR szPath) which allows, for instance,
direct assign from and to a
CString str1("c:\\temp\\list.txt"), str2;
path = str1;
str2 = path;
For more information about the
CPath class see the related article.
int FindPathItem(LPCTSTR szPath)
Return the index of the file whose path matches
szPath or -1 if the file is not in the list.
void RemoveAt(int nIndex)
Remove item at
Remove all items from the list.
void SetCallback(FILEFINDERPROC pFileFinderProc, void *pCustomParam)
Set the callback function pointer used by the search process from the
Find method. The callback
function is defined in the following way:
void FileFinderProc(CFileFinder *pFinder,
DWORD dwCode, void *pCustomParam);
pFinder .- The calling
dwCode .- The calling reason:
FF_FOUND - A new file was found
FF_DISCARDED - A file matched the file mask but not all the conditions
FF_FOLDER - The search in a new folder started
FF_FINDTEXT - Searching for text in a file. This gives our applications
the chance to process messages while searching text on big files.
pCustomParam .- The same pointer passed to the function
The name of the new found file, when the
dwCode parameter is
FF_FOUND, can be obtained
with a call like this:
pFinder->GetFilePath(pFinder->GetFileCount() - 1);
If this method is called from within the
FileFinderProc callback function, the find process
is stopped but the list of files is not deleted.
Calling this method from
FileFinderProc when the
FF_FOLDER, the name of the folder being searched is retrieved.
The CFindOpts class
This class help us configuring the search to be carried out. Its methods are simple helpers to
set the class members easily for the most common searches.
Class members explained
dwOptionsFlags - This flags indicate the constrains to be taken into account
apart from the file mask
FIND_SIZE - If the size of a file that matches the file mask is not in
the range [
nMaxSize], the file is discarded.
FIND_DATEMODIFIED - The last modified file date must be in the range [
FIND_DATECREATED - The creation file date must be in the range [
FIND_DATEACCESSED - The last accessed file date must be in the range [
FIND_ATTRIBUTES - The attributes of the file found must match the
(this member can take the same values as the one with the same name in
FIND_TEXT - The file has to contain the text specified in
sBaseFolder - The search root folder
sFileMask - The file mask (e.g.: "*.txt", "fi?e.*")
sFindText - Text that must be found in a file to consider it a match.
Note that the flag
FIND_TEXT must be added to dwOptionsFlags. If
sFindText is empty the text search is not
performed even if the
FIND_TEXT is set
bSubfolders - A boolean indicating whether the search must include subdirectories or not
nMinSize - The file size range when the
FIND_SIZE flag is set
tMaxCreated - The file creation date range when
FIND_DATECREATED flag is set
tMaxModified - The file last modified range when the
FIND_DATEMODIFIED flag is set
tMaxAccessed - The file last accessed range when the
FIND_DATEACCESSED flag is set
dwFileAttributes - The file attributes when the
FIND_ATTRIBUTES is set
sFileMask to "*.*"
nMaxSize to 0
- set all date members to the current date and time
- add normal files (
FILE_ATTRIBUTE_ARCHIVE) to the search
- add all files attributes to the search, even hidden files, system files.
- add directories to the search (directories have an own attribute:
void FindText(LPCTSTR szText)
CPath class requires linking with the library shlwapi.lib
Sample code can be found in the source of the sample application provided with this article