void CAboutDlg::OnButton2() 
{ szFilename="*.*";
SetCurrentDirectory("D:\\cpp\\");
hItem = m_tree.InsertItem("d:",TVI_ROOT,hItem); 
Search_Directory(szFilename,hItem);
}
void CAboutDlg::Search_Directory(CString Filename,HTREEITEM hItem)
{    

    bWorking = finder.FindFile(Filename);
if(!bWorking) return;
bWorking = finder.FindNextFile();
temp=finder.GetFileName();
if(finder.IsDirectory())//第一个是目录
{
if(!finder.IsDots())
{
hSubItem = m_tree.InsertItem(finder.GetFileName(),hItem);
SetCurrentDirectory(finder.GetFileTitle());
Search_Directory(Filename,hSubItem);
SetCurrentDirectory("..");
}
}
else//不是目录
{
hSubItem = m_tree.InsertItem(finder.GetFileName(),hItem);
}
while(finder.FindNextFile())
{
temp=finder.GetFileName();
if(finder.IsDirectory())
{
if(!finder.IsDots())
{
hSubItem = m_tree.InsertItem(finder.GetFileName(),hItem);
SetCurrentDirectory(finder.GetFileTitle());
Search_Directory(Filename,hSubItem);
SetCurrentDirectory("..");
}
}
else//不是目录
{
hSubItem = m_tree.InsertItem(finder.GetFileName(),hItem);
}
}
}
遍历所有目录

解决方案 »

  1.   

    void CVLanDlg::OnButton1() 
    {
    // TODO: Add your control notification handler code here
    CString szFilename="*.*";
    SetCurrentDirectory("D:\\MASM611\\");
    HTREEITEM hItem = NULL;
    m_tree.InsertItem("d:",TVI_ROOT,hItem); 
    Search_Directory(szFilename,hItem);
    }void CVLanDlg::Search_Directory(CString Filename,HTREEITEM hItem)
    {    
    CString temp;
    CFileFind finder;
    HTREEITEM hSubItem;
        BOOL bWorking = finder.FindFile(Filename);
    if(!bWorking) return;
    bWorking = finder.FindNextFile();
    temp=finder.GetFileName();
    if(finder.IsDirectory())//µÚÒ»¸öÊÇĿ¼
    {
    if(!finder.IsDots())
    {
    hSubItem = m_tree.InsertItem(finder.GetFileName(),hItem);
    SetCurrentDirectory(finder.GetFileTitle());
    Search_Directory(Filename,hSubItem);
    SetCurrentDirectory("..");
    }
    }
    else//²»ÊÇĿ¼
    {
    hSubItem = m_tree.InsertItem(finder.GetFileName(),hItem);
    }
    while(finder.FindNextFile())
    {
    temp=finder.GetFileName();
    if(finder.IsDirectory())
    {
    if(!finder.IsDots())
    {
    hSubItem = m_tree.InsertItem(finder.GetFileName(),hItem);
    SetCurrentDirectory(finder.GetFileTitle());
    Search_Directory(Filename,hSubItem);
    SetCurrentDirectory("..");
    }
    }
    else//²»ÊÇĿ¼
    {
    hSubItem = m_tree.InsertItem(finder.GetFileName(),hItem);
    }
    }
    }
    没有改动你的代码 这个代码这我的机子可以找到在MASM611下的所有文件夹啊!为什么你的那里不行呢????
      

  2.   

    void CAboutDlg::Search_Directory(CString Filename,HTREEITEM hItem)
    {    
    BOOL bWorking ;
    CFileFind finder ;
    CString szPath, szName, temp ;
    HTREEITEM hSubItem;

        bWorking = finder.FindFile(Filename);
    if(!bWorking) return;
    bWorking = finder.FindNextFile();
    if(finder.IsDirectory())//µÚÒ»¸öÊÇĿ¼
    {
    temp = finder.GetFileName() ;
    if(!finder.IsDots())
    {
    temp = finder.GetFilePath() ;
    hSubItem = m_tree.InsertItem( temp ,hItem);
    temp += "\\*.*" ;
    Search_Directory(temp,hSubItem);
    }
    }
    else//²»ÊÇĿ¼
    {
    hSubItem = m_tree.InsertItem(finder.GetFileName(),hItem);
    }
    while(finder.FindNextFile())
    {
    temp=finder.GetFileName();
    if(finder.IsDirectory())
    {
    if(!finder.IsDots())
    {
    temp = finder.GetFilePath() ;
    hSubItem = m_tree.InsertItem( temp ,hItem);
    temp += "\\*.*" ;
    Search_Directory(temp,hSubItem);
    }
    }
    else//²»ÊÇĿ¼
    {
    hSubItem = m_tree.InsertItem(finder.GetFileName(),hItem);
    }
    }
    }void CAboutDlg::OnButton2() 
    {
    TCHAR szDir[MAX_PATH] ;
    GetCurrentDirectory( MAX_PATH, szDir ) ;
    HTREEITEM hItem = m_tree.InsertItem( szDir,TVI_ROOT); 
    _tcscat( szDir, "\\*.*" ) ;
    Search_Directory(szDir,hItem);
    }
      

  3.   

    不用贴那么多代码的,楼主把下面一行:
    hItem = m_tree.InsertItem("d:",TVI_ROOT,hItem); 
    改成
    m_tree.InsertItem("d:",TVI_ROOT,hItem);
    应该就可以了。
      

  4.   

    QunKangLi(李群康) 对,我在根目录下死机,
      

  5.   

    http://home.ncust.edu.cn/~titilima/readarticle.php?id=12
      

  6.   

    void CAboutDlg::Search_Directory(CString Filename,HTREEITEM hItem)
    {    

        bWorking = finder.FindFile(Filename);
    if(!bWorking) return;
    bWorking = finder.FindNextFile();
    temp=finder.GetFileName();
    这里,你的finder是个全局的变量。应该在Search_Directory里重新申请CFileFinder变量。
      

  7.   

    已是QunKangLi(李群康) 代码,但只能找到目录下的1-(n-1)个文件。不能找到第n个文件。不知是怎么回事
    谁能回答一下吗?
      

  8.   

    你的问题出在:列举了第一个子目录后没有返回到上一级目录。
    如:你传进去的第一字符串(c:\1)是目录,把1设置为当前目录,而1如果是一个目录(1下面有1-1,1-2子目录),那么你的程序是设置1-1为子目录,假定1-1为下面有一个文件1-1-1.txt,那么你列举了1-1-1.txt,程序就返回了退出递归。
    正确的做法是列举了1-1中所有的文件后,把目录设置为1,去列举1-2中的所有文件,1-2中列举完后,把目录设置为c;\列举目录下的其他文件,最后退出!