english | deutsch | espaņol

 

 

#include "stdafx.h" #include "FolderTools.h" #define NO_TRACE #include "Debug.h" BOOL MatchMask(LPCTSTR pszName, LPCTSTR pszMask, BOOL bMaskInclude) { CString strMask = pszMask; int iPos = 0; for (CString strToken = strMask.Tokenize(_T(";"), iPos); !strToken.IsEmpty(); strToken = strMask.Tokenize(_T(";"), iPos)) { if (PathMatchSpec(pszName, strToken)) return bMaskInclude; } return !bMaskInclude; } DWORD WalkDir(LPCTSTR pszDir, WALKDIRPARMS *pwd) { WIN32_FIND_DATA fd; DWORD dwResult; CFindHandle h; CString strFileSpec = (CString)pszDir + _T("\\*.*"); if (pwd->bSubDir) { h = FindFirstFile(strFileSpec, &fd); if (!h.IsValid()) return GetLastError(); if ((fd.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY) && _tcscmp(fd.cFileName, _T(".")) && _tcscmp(fd.cFileName, _T(".."))) { dwResult = WalkDir((CString)pszDir+_T("\\")+fd.cFileName, pwd); if (dwResult != ERROR_SUCCESS) return dwResult; } while (FindNextFile(h, &fd)) { if ((fd.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY) && _tcscmp(fd.cFileName, _T(".")) && _tcscmp(fd.cFileName, _T(".."))) { dwResult = WalkDir((CString)pszDir+_T("\\")+fd.cFileName, pwd); if (dwResult != ERROR_SUCCESS) return dwResult; } } dwResult = GetLastError(); if (dwResult != ERROR_NO_MORE_FILES) return dwResult; } h = FindFirstFile(strFileSpec, &fd); if (!h.IsValid()) return GetLastError(); if (!(fd.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY) && MatchMask(fd.cFileName, pwd->pszMask, pwd->bMaskInclude)) { dwResult = pwd->fHandler((CString)pszDir+_T("\\")+fd.cFileName, FALSE, pwd->pvParam); if (dwResult != ERROR_SUCCESS) return dwResult; } while (FindNextFile(h, &fd)) { if (!(fd.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY) && MatchMask(fd.cFileName, pwd->pszMask, pwd->bMaskInclude)) { dwResult = pwd->fHandler((CString)pszDir+_T("\\")+fd.cFileName, FALSE, pwd->pvParam); if (dwResult != ERROR_SUCCESS) return dwResult; } } dwResult = GetLastError(); if (dwResult != ERROR_NO_MORE_FILES) return dwResult; h.Close(); return pwd->fHandler(pszDir, TRUE, pwd->pvParam); }