非递归方式遍历目录及其子目录的文件
在程序设计开发中,搜索一个目录及其子目录中的所有文件是一个常见的要求,递归搜索是一种非常直观的算法。但是由于目录中的文件数量很大,每个文件名往往占据很多空的空间,而且目录嵌套很深,这种递归算法对程序的堆栈是一个严重的威胁。本文提出了一种非递归算法来搜索和遍历目录中的所有文件。
typedef BOOL(* PROCESS _ FILE _ FUNCTION)(LPCTSTR文件名);
上面的PROCESS_FILE_FUNCTION是一个函数指针。这个函数用filename处理文件。如果函数返回
FALSE,ProcessDirectory将立即退出。停止查找
void进程目录(lpctstr dirname,process _ file _ function proc)
{
cstringarraydirs;
CString search name;
CFileFind查找;
dirs。Add(目录名);
BOOL bRet;
while(dirs。GetSize()> 0)
{
search name = dirs[0]+\ " \ \ \ \ *。*\";
dirs。remove at(0);
bRet = find。FindFile (searchname,0);
如果(!bRet)继续;
do{
bRet = find。FindNextFile();
if(find . is dots())
{//忽略..和..文件
继续;
}
if(查找。is directory())
{
dirs。添加(查找。getfile path());
继续;
}else{
if(!proc(查找。getfile path()))
{
return;
}
}
} while(bRet);
}
}
0条评论