CFileFinder - 扩展 CFileFind MFC 类的功能






4.89/5 (45投票s)
2002年8月6日
4分钟阅读

377641

6149
按名称、大小、日期、文本内容搜索文件。搜索可以在单个文件夹中进行,也可以包含其子文件夹。

引言
CFileFinder 使用 CFileFind 从指定目录开始搜索文件,并可选择包含其子目录。
- 内部维护一个文件路径列表。
- 如果使用回调机制,可以立即获取新找到的文件路径。
- 该类不仅支持基于文件掩码的搜索,还支持文件大小、文件日期、文本内容和文件属性的搜索。
类方法
FindFiles
int FindFiles(LPCTSTR szBaseFolder, LPCTSTR szFileMask, BOOL bSubFolders = FALSE)
搜索与掩码 szFileMask 匹配的文件。此文件掩码可以包含一个或多个通配符(* 和 ?)。
查找
int Find(CFileFinder::CFindOpts &opts)
搜索符合 CFindOpts 类参数中建立的条件的文件(请参阅下面对 CFindOpts 的解释)。
FindTextInFile
BOOL FindTextInFile(LPCTSTR szFile, LPCTSTR szText)
如果文本 szText 在文件 szFile 中被找到,则返回 TRUE。它被 Find 方法内部使用。它被声明为 public,以便应用程序可以使用此功能。
GetFileCount
int GetFileCount()
返回调用该方法时找到的项的数量,或上次 Find 或 FindFiles 操作找到的总文件数。
GetFilePath
CPath GetFilePath(int nIndex)
返回一个 CPath 对象,其中包含所需的文件索引路径。在 CPath 类中定义了两个有用的运算符:operator LPCTSTR () 和 operator = (LPCTSTR szPath),例如,允许直接从 CString 对象进行赋值和到 CString 对象进行赋值。
// ... CString str1("c:\\temp\\list.txt"), str2; CPath path; path = str1; str2 = path; // at this point, str2 contains the // string "c:\temp\list.txt"
有关 CPath 类的更多信息,请参阅相关文章。
FindPathItem
int FindPathItem(LPCTSTR szPath)
返回路径与 szPath 匹配的文件的索引,如果文件中不存在该文件,则返回 -1。
RemoveAt
void RemoveAt(int nIndex)
移除位于 nIndex 位置的项。
RemoveAll
void RemoveAll()
从列表中移除所有项。
SetCallback
void SetCallback(FILEFINDERPROC pFileFinderProc, void *pCustomParam)
设置 Find 方法使用的回调函数指针。回调函数定义如下:
void FileFinderProc(CFileFinder *pFinder, DWORD dwCode, void *pCustomParam);
- pFinder- 调用此方法的- CFileFinder对象
- dwCode- 调用原因
- FF_FOUND- 找到一个新文件
- FF_DISCARDED- 文件匹配文件掩码,但未满足所有条件
- FF_FOLDER- 开始搜索新文件夹
- FF_FINDTEXT- 正在文件中搜索文本。这使我们的应用程序有机会在搜索大文件中的文本时处理消息。
- pCustomParam- 传递给- SetCallback函数的相同指针。
当 dwCode 参数为 FF_FOUND 时,可以通过如下调用获取新找到的文件名:
pFinder->GetFilePath(pFinder->GetFileCount() - 1);
StopSearch
void StopSearch()
如果从 FileFinderProc 回调函数中调用此方法,则停止查找过程,但不会删除文件列表。
GetSearchingFolder
LPCTSTR GetSearchingFolder()
当 dwCode 参数为 FF_FOLDER 时,从 FileFinderProc 调用此方法可检索正在搜索的文件夹名称。
CFindOpts 类
此类有助于我们配置要执行的搜索。其方法是简单的辅助函数,用于轻松设置类成员以进行最常见的搜索。
类成员说明
- dwOptionsFlags- 除了文件掩码外,这些标志指示要考虑的约束条件。
- FIND_SIZE- 如果文件大小不在 [- nMinSize,- nMaxSize] 范围内,则丢弃该文件。
- FIND_DATEMODIFIED- 最后修改日期必须在 [- tMinModified,- tMaxModified] 范围内。
- FIND_DATECREATED- 创建日期必须在 [- tMinCreated,- tMaxCreated] 范围内。
- FIND_DATEACCESSED- 最后访问日期必须在 [- tMinAccessed,- tMaxAccessed] 范围内。
- FIND_ATTRIBUTES- 文件属性必须与- dwFileAttributes成员匹配(此成员可以取与- WIN32_FIND_DATA结构中同名成员相同的值)。
- FIND_TEXT- 文件必须包含- sFindText中指定的文本。
- sBaseFolder- 搜索根文件夹。
- sFileMask- 文件掩码(例如:“*.txt”、“fi?e.*”)。
- sFindText- 必须在文件中找到的文本才能被视为匹配。注意,必须将- FIND_TEXT标志添加到 dwOptionsFlags。如果- sFindText为空,即使设置了- FIND_TEXT标志,也不会执行文本搜索。
- bSubfolders- 一个布尔值,指示搜索是否应包含子目录。
- nMinSize/- nMaxSize- 当设置了- FIND_SIZE标志时的文件大小范围。
- tMinCreated/- tMaxCreated- 当设置了- FIND_DATECREATED标志时的文件创建日期范围。
- tMinModified/- tMaxModified- 当设置了- FIND_DATEMODIFIED标志时的文件最后修改日期范围。
- tMinAccessed/- tMaxAccessed- 当设置了- FIND_DATEACCESSED标志时的文件最后访问日期范围。
- dwFileAttributes- 当设置了- FIND_ATTRIBUTES标志时的文件属性。
类方法
void Reset()
- 清空 sBaseFolder。
- 将 sFileMask设置为“*.*”。
- 将 bSubFolders设置为FALSE。
- 将 nMinSize、nMaxSize设置为 0。
- 重置 dwFileAttributes和dwOptionsFlags标志。
- 将所有日期成员设置为当前日期和时间。
void FindNormalFiles()
- 将普通文件(FILE_ATTRIBUTE_ARCHIVE)添加到搜索中。
- 将 FIND_ATTRIBUTES添加到dwOptionsFlags。
void FindAllFiles()
- 将所有文件属性添加到搜索中,包括隐藏文件、系统文件。
- 将 FIND_ATTRIBUTES添加到dwOptionsFlags。
void FindDirectories()
- 将目录添加到搜索中(目录有自己的属性:FILE_ATTRIBUTE_DIRECTORY)。
- 将 FIND_ATTRIBUTES添加到dwOptionsFlags。
void FindText(LPCTSTR szText)
- 将 sFindText设置为szText。
- 将 FIND_TEXT添加到dwOptionsFlags。
注释
CPath 类需要链接 shlwapi.lib 库。
示例代码可以在本文提供的示例应用程序的源代码中找到。
