程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C >> 關於C >> 可控制遍歷深度的文件搜索類

可控制遍歷深度的文件搜索類

編輯:關於C
view plaincopyprint? //---------------------------------------------------------------------------      #ifndef SearchFilesUnitH   #define SearchFilesUnitH   //---------------------------------------------------------------------------      #include <windows.h>   #include <stdio.h>      typedef void(__stdcall *PSEARCHCALLBACK)(LPCTSTR);   typedef void(__stdcall *PDIRCOMPLETEDCALLBACK)(LPCTSTR);      class CSearchFile   {   public:       // 無深度初始化構造函數,此時掃描深度不受限制       CSearchFile()       {           m_depthLevel = -1;       }              // 掃描深度初始化構造函數       CSearchFile(int depthLevel)       {           m_depthLevel = depthLevel;       }   private:       int m_depthLevel;      private:       BOOL DirectoryExist(LPCTSTR lpszDir)       {           DWORD dwAttribute = ::GetFileAttributes(lpszDir);           if (dwAttribute != 0xFFFFFFFF)           {               return ((dwAttribute & FILE_ATTRIBUTE_DIRECTORY) == FILE_ATTRIBUTE_DIRECTORY);           }           return FALSE;       }   public:       BOOL SearchFile(               LPCTSTR root                                    /* 搜索文件的根目錄 */               , PSEARCHCALLBACK pFoundCallback                /* 文件搜到後的 Callback                                                              在此Callback中可以實現                                                              文件類型的過濾,文件刪除,復制等等                                                              與文件相關的操作                                                              */               , PDIRCOMPLETEDCALLBACK pDirCompletedCallback   /* 完成一個子目錄後的 Callback                                                              在此Callback中可以配合上個Callback                                                              的文件刪除功能,刪除文件夾                                                              */               , int depthLevel = 0               );   };   #endif   .cpp 文件 [cpp]view plaincopyprint? //---------------------------------------------------------------------------   #include "SearchFilesUnit.h"   //---------------------------------------------------------------------------         BOOL CSearchFile::SearchFile(                           LPCTSTR root                                    /* 搜索文件的根目錄 */                           , PSEARCHCALLBACK pFoundCallback                /* 文件搜到後的 Callback                                                                          在此Callback中可以實現                                                                          文件類型的過濾,文件刪除,復制等等                                                                          與文件相關的操作                                                                          */                           , PDIRCOMPLETEDCALLBACK pDirCompletedCallback   /* 完成一個子目錄後的 Callback                                                                          在此Callback中可以配合上個Callback                                                                          的文件刪除功能,刪除文件夾                                                                          */                           , int depthLevel                           )   {       char szPath[MAX_PATH] = {0};       WIN32_FIND_DATA stWFD;       memset(&stWFD, 0, sizeof(WIN32_FIND_DATA));       sprintf(szPath, "%s\\*", root);              // 如果有掃描深度控制       if (m_depthLevel > 0)       {           if (depthLevel++ > m_depthLevel)           {               depthLevel = 0;               return FALSE;           }       }          HANDLE file = ::FindFirstFile(szPath, &stWFD);          if (INVALID_HANDLE_VALUE == file) return FALSE;          do       {           if (strcmp(stWFD.cFileName, ".") && strcmp(stWFD.cFileName, ".."))           {               char szFoundFile[MAX_PATH] = { 0 };               sprintf(szFoundFile, "%s\\%s", root, stWFD.cFileName);                     // 判斷是目錄還是文件               if (DirectoryExist(szFoundFile))               {                   SearchFile(szFoundFile, pFoundCallback, pDirCompletedCallback, depthLevel);               }               if (NULL != pFoundCallback)               {                   pCallback(szFoundFile);               }           }          }while (::FindNextFile(file, &stWFD));                  ::FindClose(file);                  if (NULL != pDirCompletedCallback)       {           pDirCompletedCallback(root);       }       return TRUE;   }    
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved