Welcome

首页 / 软件开发 / C++ / 改进《遍历文件夹并建成目录树》

改进《遍历文件夹并建成目录树》2010-12-22miao baoli刚刚看到VC知识库二十期中的一篇文章《》。主要 是用一个递归函数来扫描目标文件夹,但是这个函数还存在目录层数的限制。

我写了另外一个函数,实现的结果跟上文一模一样,但消除了目录层数的限 制, 原代码与改进后的代码如下:

//原来的函数原型void CFileTreeDlg::BrowseFile(int CallNum, CString strFile)
{
CallNum++;
CFileFind ff;
CString szDir = strFile;
if(szDir.Right(1) != "\")
szDir += "\";
szDir += "*.*";
BOOL res = ff.FindFile(szDir);
while(res)
{
res = ff.FindNextFile();
if(ff.IsDirectory() && !ff.IsDots())
{
//如果是一个子目录,用递归继续往深一层找
CString strPath = ff.GetFilePath();
CString strTitle = ff.GetFileTitle();
int i =0;
switch(CallNum)
{
case 1:
strHTFir =
m_FileTree.InsertItem(strTitle,0,0,NULL);
break;
case 2:
strHTSec =
m_FileTree.InsertItem(strTitle,0,0,strHTFir);
break;
case 3:
strHtThi =
m_FileTree.InsertItem(strTitle,0,0,strHTSec);
break;
case 4:
strHtFor =
m_FileTree.InsertItem(strTitle,0,0,strHtThi);
break;
default:
strHtFif =
m_FileTree.InsertItem(strTitle,0,0,strHtFor);
break;
}
BrowseFile(CallNum,strPath);
}
else if(!ff.IsDirectory() && !ff.IsDots())
{
//显示当前访问的文件
CString strPath;
CString strTitle;
strPath = ff.GetFilePath();
strTitle = ff.GetFileTitle();
switch(CallNum)
{
case 1:
strRoot =
m_FileTree.InsertItem(strTitle,0,0,NULL);
break;
case 2:
strHtEnd =
m_FileTree.InsertItem(strTitle,0,0,strHTFir);
break;
case 3:
strHtEnd =
m_FileTree.InsertItem(strTitle,0,0,strHTSec);
break;
case 4:
strHtEnd = m_FileTree.InsertItem(strTitle,0,
0,strHtThi);
break;
case 5:
strHtEnd = m_FileTree.InsertItem(strTitle,0,
0,strHtFor);
break;
default:
strHtEnd = m_FileTree.InsertItem(strTitle,0,
0,strHtFif);
break;
}
}
}
ff.Close();//关闭
}