65.9K
CodeProject 正在变化。 阅读更多。
Home

CFileFinder - 扩展 CFileFind MFC 类的功能

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.89/5 (45投票s)

2002年8月6日

4分钟阅读

viewsIcon

377641

downloadIcon

6149

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

Sample Image - image.gif

引言

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()

返回调用该方法时找到的项的数量,或上次 FindFindFiles 操作找到的总文件数。

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
  • nMinSizenMaxSize 设置为 0。
  • 重置 dwFileAttributesdwOptionsFlags 标志。
  • 将所有日期成员设置为当前日期和时间。

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 库。

示例代码可以在本文提供的示例应用程序的源代码中找到。

© . All rights reserved.