遍历文件, 包括子文件夹

 

typedef VOID (WINAPI *FILEENUMPROC)(VOID *pParam, CHAR *pFilePath, CHAR *pFileName);

 

 

 

BOOL       FolderFileEnum(FILEENUMPROC FileEnumProc, VOID *ProcParam, CHAR *pPath, CHAR *pFindFile = "*.*")

{

       WIN32_FIND_DATAA        FindData;

       HANDLE                                   hFind;

       CHAR                               szFindDir[MAX_PATH*2];

       CHAR                               szFulllFindFile[MAX_PATH*2];

       BOOL                                bRetVal;

 

       strcpy(szFindDir, pPath);

       if(szFindDir[strlen(szFindDir)-1] == '//')

              szFindDir[strlen(szFindDir)-1] = 0;

 

       sprintf(szFulllFindFile, "%s//%s", szFindDir, pFindFile);

 

       ZeroMemory(&FindData, sizeof(FindData));

       hFind = FindFirstFileA(szFulllFindFile, &FindData);

       if(hFind == INVALID_HANDLE_VALUE)

              return FALSE;

 

       for(bRetVal = TRUE;

              bRetVal;

              bRetVal = FindNextFileA(hFind, &FindData))

       {

              if(FindData.cFileName[0] == '.' &&

                     (FindData.cFileName[1] == 0 || (FindData.cFileName[1] == '.' && FindData.cFileName[2] == 0))

                     )

                     continue;

 

              FileEnumProc(ProcParam, szFindDir, FindData.cFileName);

 

              if(FindData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)

              {

                     CHAR                 szNewFolder[MAX_PATH*2];

 

                     sprintf(szNewFolder, "%s//%s", szFindDir, FindData.cFileName);

                     FolderFileEnum(FileEnumProc, ProcParam, szNewFolder, pFindFile);

              }

       }

 

       FindClose(hFind);

 

       return TRUE;

}

 

 

 

 

class       CHtmDirConvert

{

       CHtmDirConvert()

       {

              AddFileExType(".htm");

              AddFileExType(".html");

       }

 

 

       ~CHtmDirConvert()

       {

 

       }

 

 

      

       static VOID WINAPI       FileEnumProc(VOID *pParam, CHAR *pPath, CHAR *pFile)

       {

              CHtmDirConvert              *pThis;

              CHAR                        szExName[MAX_PATH];

 

              pThis = (CHtmDirConvert *)pParam;

 

              _splitpath(pFile, NULL, NULL, NULL, szExName);

 

              if(pThis->CheckExName(szExName) == FALSE)

                     return;

 

 

              pThis->ReplaceOneFile(pPath, pFile);

       }

 

       BOOL       ReplaceOneFile(CHAR *pPath, CHAR *pFile)

       {

              NLog::LogString("%s//%s", pPath, pFile);

 

              return FALSE;

       }

 

       BOOL       CheckExName(CHAR *pFileExName)

       {

              if(m_FileExList.Find(pFileExName) == NULL)

                     return FALSE;

 

              return TRUE;

       }

 

       BOOL       ClearFileExType(BOOL bKeepDefault = TRUE)

       {

              m_FileExList.RemoveAll();

 

              AddFileExType(".htm");

              AddFileExType(".html");

       }

 

 

       BOOL       AddFileExType(CHAR *pFileEx)

       {

              m_FileExList.AddTail(pFileEx);

 

              return FALSE;

       }

 

 

       BOOL       Convert(CHAR *pHttpPath, CHAR *pFileRoot)

       {

              m_cStrHttpPath = pHttpPath;

              m_cStrFileRoot = pFileRoot;

 

              FolderFileEnum(FileEnumProc, this, pFileRoot);

 

              return TRUE;

       }

 

       CString               m_cStrHttpPath;

       CString               m_cStrFileRoot;

       CStringList          m_FileExList;

 

};

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值