FindFirstFile, FineNextFile, FindClose

解决方案 »

  1.   

    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/shell/programmersguide/shell_basics/shell_basics_programming/navigate.asp
      

  2.   

    自己递归遍历,除了上面的函数,还可以用
    _findfirst,_findnext,_findclose
    结构用_finddata_t
      

  3.   

    CFileFind finder;
    CStringArray m_TempArray;
    CString szTemplate = _T(m_strath+\\*.*");
    BOOL bResult = finder.FindFile(szTemplate);//查找第一个文件
    CString TemplateName;
    while (bResult)
    {
    bResult=finder.FindNextFile();//查找下一个文件
    if(finder.IsDots())
    continue;
    if(finder.IsDirectory())
    TemplateName=finder.GetFileTitle();
    m_TempArray.Add(TemplateName);//
    }
      

  4.   

    EmuFiles(const char * path)
    {
    CString cs(path);
    WIN32_FIND_DATA data;
    cs += "\\*.*";
    HANDLE handle = FindFirstFile((LPCSTR)cs,&data);
    BOOL ret = (BOOL)handle;
    while(ret)
    {
    if(data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
    {
    if(data.cFileName[0] != '.')  //IsDirectory
    {
    cs = path;
    cs +="\\";
    cs += data.cFileName;
    EmuFiles((LPCSTR)cs);
    }
    }
    else  //is a file
    {
    cs = path;
    cs +="\\";
    cs += data.cFileName;
                                         AfxMessageBox(cs); }

    ret = FindNextFile(handle,&data);
    }
    FindClose(handle);
    }
      

  5.   

    BOOL IsOver=FALSE;
    CString FileName=_T(" ");
    // pList->ResetContent();//重新设置列表框内容
    // TODO: Add your control notification handler code here
    CString strFileName;
    HANDLE FindHandle;
    // 查找本文件目录下的文件
    //添加新的整个驱动器的文件查询
    CString CurDir1;
    int i;
    char AppPath[256];  
    ::GetCurrentDirectory(256,AppPath); 
    for(i=0;i<4;i++)
    CurDir1+=AppPath[i];
    // CurDir1=CurDir1+"/0";
    //
    // ::SetCurrentDirectory(CurDir1);
    for(i=0;i<CurDir.GetLength();i++)
    CurDir1+=CurDir[i];
    CurDir1=(LPCTSTR)AppPath ;
    CurDir1=CurDir1+"\\"+CurDir;
    FindHandle=::FindFirstFile((LPCTSTR)CurDir1,&MyFilePath);
    // FindHandle=::FindFirstFile((LPCTSTR)("*.*"),&MyFilePath);
    if(FindHandle==INVALID_HANDLE_VALUE)
    {
    // ::AfxMessageBox("查找文件错误!");
    IsOver=TRUE;
    } while(!IsOver)
    {    
    FileName.Format("%s", MyFilePath.cFileName); 

    // if(CurDir.GetLength()!=0)
    // strFileName=CurDir+"\\"+FileName;
    // else
    // strFileName=FileName;
    // if(!FindNextFile(FindHandle,&MyFilePath))
    // IsOver=FALSE;
    if((MyFilePath.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY)&&(MyFilePath.cFileName[0]!=_T('.')))
    {
    strFileName=FileName+"\\"+CurDir;
    // ::SetCurrentDirectory(MyFilePath.cFileName);
    FindFile(strFileName);
    // ::SetCurrentDirectory("..");
    }
    else if(MyFilePath.cFileName[0]!=_T('.'))
    pList.AddString(FileName); 
    FileNum++;
    IsOver=!FindNextFile(FindHandle,&MyFilePath);
    }
    FindClose(FindHandle);
      

  6.   

    void FindAllFile(CString strParent)//遍历子目录和文件
    {CFileFind f;
    BOOL bFind = f.FindFile(strParent + "*.*");
    while(bFind)
    {
    bFind = f.FindNextFile();
    if(f.IsDots()) continue;
    if(f.IsDirectory())
    {
    FindAllFile(strParent + f.GetFileName() + "\\");
    }
        //(strParent + f.GetFileName())是文件名,处理文件
    }
        //处理目录(strParent);
    }
    //显示当前目录中的文件详细信息
    FindFileData(CString strParent)
    {
       HANDLE hSearch;
       WIN32_FIND_DATA ffd;
       hSearch = FindFirstFile("*.*",&ffd);
       if(hSearch==INVALID_HANDLE_VALUE)MessageBox("No Files");
       else
       {
           //显示找到的文件的信息,文件的信息存到了ffd中
           while(FindNextFile(hSearch,&ffd))
    { //显示找到的文件的信息,文件的信息存到了ffd中} 
       }
    }
      

  7.   

    void EnumerateFolders()
    {
        WIN32_FIND_DATA fd;
        ANDLE hFind =::FindFirstFile(_T("*.*"),&fd);
        if(hFind!=INVALID_HANDLE_VALUE)
        {
           do{
               if(fd.dwFileAttributtes&FILE_ATTRIBUTE_DIRECTORY)
                 {
                   CString name =fd.cFileName;
                   if(name!=_T(".")&&name!=_T(".."))
                    {
                        TRACE(_T("%s\n"),fd.cFileName);
                        ::SetCurrentDirectory(fd.CFileName);
                          EnumerateFolders();
                         ::SetCurrentDirectory(_T(".."));
                     }
                  }
                }while(::FindNextFile(hFind,&fd));
               ::FindClose(hFind);
    }
    }
    相当好用。