您的位置:首页 > 其它

递归遍历文件夹查找文件

2012-02-20 13:28 239 查看
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:"));
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: