给分:)

解决方案 »

  1.   

    void CXGDebug::SearchPath(LPVOID pParam,
      char* szPathName, 
      SEARCH_PATH_CALLBACK pCallBack)
    {
    WIN32_FIND_DATA foundfilename; 
    char szNameBuffer[FILE_NAME_LENGTH];
    HANDLE hFoundfile;
    sprintf(szNameBuffer,"%s\\*.*",szPathName);
    char szPathFileName[FILE_NAME_LENGTH];
    char szCurPath[FILE_NAME_LENGTH];
    GetCurrentDirectory(FILE_NAME_LENGTH,szCurPath);
    if(::SetCurrentDirectory(szPathName))
    {  
    hFoundfile=::FindFirstFile(szNameBuffer,&foundfilename);
    while(INVALID_HANDLE_VALUE!=hFoundfile)
    {
    if(!strcmp(".",foundfilename.cFileName))
    {
    if(!::FindNextFile(hFoundfile,&foundfilename))
    break;
    else continue;
    }
    if(!strcmp("..",foundfilename.cFileName))
    {
    if(!::FindNextFile(hFoundfile,&foundfilename))
    break;
    else continue;
    }
    sprintf(szPathFileName,"%s\\%s",
    szPathName,foundfilename.cFileName);
    if(FILE_ATTRIBUTE_DIRECTORY & foundfilename.dwFileAttributes)
    {
    //递归遍历子目录
    SearchPath(pParam,szPathFileName,pCallBack);
    }
    else
    {
    //处理文件命
    pCallBack(pParam,
    szPathName,
    foundfilename.cFileName,
    szPathFileName,
     &foundfilename);
    }
    if(!::FindNextFile(hFoundfile,&foundfilename))
    break;
    }
    ::FindClose(hFoundfile);
    }
    ::SetCurrentDirectory(szCurPath);
    }
    回调函数类型://目录遍历回调函数指针
    typedef void (*SEARCH_PATH_CALLBACK)(LPVOID pParam,
     char* szPathName,
     char* szFileName,
     char* szPathFileName,
     WIN32_FIND_DATA* pFileStruct);
      

  2.   

    HANDLE FindFirstFile(
      LPCTSTR lpFileName,               // file name
      LPWIN32_FIND_DATA lpFindFileData  // data buffer
    );
    BOOL FindNextFile(
      HANDLE hFindFile,                // search handle 
      LPWIN32_FIND_DATA lpFindFileData // data buffer
    );
    DWORD GetFileAttributes(
      LPCTSTR lpFileName   // name of file or directory
    );
    BOOL FindClose(
      HANDLE hFindFile   // file search handle
    );用FindFirstFile查找第一个符合条件的文件/目录,并返回一个Handle,然后用FindNextFile查找所有符合条件的其他文件/目录直到返回FALSE,表示查找结束。
    可以用GetFileAttributes来判断是文件还是目录。如果需要查找子目录,可以是用递归调用。