void ListFolder(CString sPath)
{
CFileFind ff;
BOOL bFound;
bFound = ff.FindFile(sPath + "\\*.* ");//找第一个文件
while(bFound)//如果找到,继续
{
bFound = ff.FindNextFile();
CString sFilePath = ff.GetFilePath();
if(ff.IsDirectory())//如果是目录,注意任何一个目录都包括.和..目录
{
if(!ff.IsDots())//去除.和..目录
ListFolder(sFilePath);//递归下一层目录
} else {
AfxMessageBox(sFilePath);//枚举到的文件名字
}
}
ff.Close();
}
CFileFind Member
MFC类CFileFind执行本地文件查找,是CGopherFileFind和CFtpFileFind的基类;后两类用于Internet文件查找。CFileFind包括的成员函数有开始查找、定位文件、返回标题名或路径。对于Internet查找来说,GetFileURL返回文件的URL。
CFileFind是为另两类查找特殊服务器设计的MFC类的基类,CGopherFileFind在Gopher服务器上工作,CFtpFileFind在FTP服务器上工作,这些类为用户查找文件提供了一种无缝机制,与服务器协议、文件类型、地点、本地机器或远程服务器无关。
以下代码将当前目录下的文件枚举出来并打印每个文件名:
CFileFind finder
BOOL bWorking = finder.FindFile("*.*");
while(bWorking)
{
bWorking = finder.FindNextFile( );
cout <<(LPCTSTR) finder.GetFileName( ) <<endl;
}
为使示例简单,此代码使用标准C++库函数cout类,cout行可由调用CListBox::AddString来代替。
#include <afx.h>
请参阅:
CFtpFileFind, CGopherFileFind, CInternetFile, CGopherFile, CHttpFile
CFileFind类的成员
构造函数
CFileFind 构造一个CFileFind对象。
属性
GetLength 获取找到文件的长度,以字节为单位
GetFileName 获取找到文件的名字
GetFilePath 找到文件的全路径
GetFileTitle 获取找到文件的标题,标题不包括扩展内容
GetFileURL 获取找到文件的URL,包括文件路径
GetRoot 获取找到文件根目录
GetCreationTime 获取文件创建时间
GetLastAccessTime 获取文件最后一次打开的时间
GetLastWriteTime 文件最后改变和存储的时间
MatchesMask 指定要找的文件的属性
IsDots 查看文件名是否是包含"."或"..",以表明它的确是一个目录
IsReadOnly 文件是否是只读
IsDirectory 文件是否是目录
IsCompressed 文件是否是压缩
IsSystem 文件是否是系统文件
IsHidden 文件是否是隐藏
IsTemporary 文件是否是临时的
IsNormal 文件是否是常规的(无其它属性)
IsArchived 文件是否是档案
操作
Close 关闭查找请求
CloseContext 关闭指定的文件的当前的搜索处理。
FindFile 查找一个目录中的指定文件
FindNextFile 从FindFile以前调用开始继续下一查找
MFC Library Reference
CFileFind Class
Performs local file searches and is the base class for CGopherFileFind and CFtpFileFind, which perform Internet file searches.
搜索本地文件并且是CGopherFileFind 和 CFtpFileFind的基类,这两个类是用来在internet上进行文件搜索。
此文件包含在Header: afx.h里面。
例子:The following code will enumerate all the files in the current directory, printing the name of each file:(下面的代码将会列举所有的在当前目录下的文件,并且将他们的文件名输出)
CFileFind finder;
BOOL bWorking = finder.FindFile("*.*");
while (bWorking)
{
bWorking = finder.FindNextFile();
cout << (LPCTSTR) finder.GetFileName() << endl;
}
===================================================================================
BOOL FindNextFile(
HANDLE hFindFile, //searchhandle
LPWIN32_FIND_DATA lpFindFileData //databuffer
);
编辑本段功能说明
继续查找FindFirstFile函数搜索后的文件
编辑本段参数说明
HANDLE hFindFile搜索的文件句柄 函数执行的时候搜索的是此句柄的下一文件
LPWIN32_FIND_DATA lpFindFileData 指向一个用于保存文件信息的结构体
编辑本段返回值
非零表示成功,零表示失败。如不再有与指定条件相符的文件,会将GetLastError设置成ERROR_NO_MORE_FILES