void IsFindFile(CString strPatn, CString strwjm)
{
CFileFind fileFind;
CString NextDir;
CString Directory(strPatn);
Directory += "\\*.*";
BOOL bResult = fileFind.FindFile(Directory);
while(bResult)
{
bResult = fileFind.FindNextFile();
if(fileFind.IsDots()) //判断是不是“.”(文件夹本身)或者“..”(父文件夹)
continue;
if(fileFind.IsDirectory())
{
NextDir = fileFind.GetFilePath(); //获得当前文件的路径
IsFindFile(NextDir,strwjm);
}
else
{
CString filename=fileFind.GetFileTitle(); //获得当前文件名不包括后缀名
if(filename==strwjm)
{
GLpathnamne=fileFind.GetFilePath(); //返回整个文件的全路径the file path c:\myhtml\myfile.txt.
}
}
}
fileFind.Close();
}
参数1:所要遍历的文件夹;参数2:所要查找的文件名;
若是找到所要查找的文件,将这文件的全路径添加到全局变量GLpathname中记录;
此函数效率上存在一个问题:若是文件嵌套,不同的文件中可能装有相同的文件,查找每一个文件都是从头遍历到尾,其实可以改改这个函数,当只要查找到这个文件函数就推出遍历查询,我们的目的就是查找这个文件是不是在我们要找的这个文件中,没必要即使查找到了也要把整个文件夹遍历完,明显效率降低了。
MSDN中的例子:
void Recurse(LPCTSTR pstr)
{
CFileFind finder;
// build a string with wildcards
CString strWildcard(pstr);
strWildcard += _T("\\*.*");
// start working for files
BOOL bWorking = finder.FindFile(strWildcard);
while (bWorking)
{
bWorking = finder.FindNextFile();
// skip . and .. files; otherwise, we'd
// recur infinitely!
if (finder.IsDots())
continue;
// if it's a directory, recursively search it
if (finder.IsDirectory())
{
CString str = finder.GetFilePath();
TRACE(_T("%s\n"), (LPCTSTR)str);
Recurse(str);
}
}
finder.Close();
}
void PrintDirs()
{
Recurse(_T("F:"));
}