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 库。
示例代码可以在本文提供的示例应用程序的源代码中找到。