//---------------------------------------------------------------------------------
void CClearSiteDlg::OnOpenDialog()
{
CountFindFiles = 0;
CString strSelectedFolder;
m_path.GetWindowText(strSelectedFolder);
LPTSTR szPath = strSelectedFolder.GetBuffer(_MAX_PATH);
m_path.GetWindowText((CString)szPath);
strSelectedFolder.ReleaseBuffer();
if (GetFolder(&strSelectedFolder, "Выберете каталог сайта", szPath, NULL, this->m_hWnd)) {
DirSite = strSelectedFolder;
CWaitCursor waitCur;
//подсчитываем количество фалов
GetCountFile(szPath, "*.*");
//обновляем caption формы
UpdateCaptionForm(FinishFindFiles);
//отображаем выбранный путь в CStatic
m_path.SetWindowText(strSelectedFolder);
waitCur.Restore();
}
}
//---------------------------------------------------------------------------------
static int CALLBACK
BrowseCallbackProc (HWND hWnd, UINT uMsg, LPARAM lParam, LPARAM lpData)
{
TCHAR szPath[_MAX_PATH];
switch (uMsg) {
case BFFM_INITIALIZED:
if (lpData)
SendMessage(hWnd,BFFM_SETSELECTION,TRUE,lpData);
break;
case BFFM_SELCHANGED:
SHGetPathFromIDList(LPITEMIDLIST(lParam),szPath);
SendMessage(hWnd, BFFM_SETSTATUSTEXT, NULL, LPARAM(szPath));
break;
}
return 0;
}
//---------------------------------------------------------------------------------
bool CClearSiteDlg::GetFolder (CString* strSelectedFolder, LPCTSTR szTitle, LPTSTR szPath, LPCTSTR szRoot, HWND hWndOwner)
{
if (szPath == NULL) return false;
bool result = false;
BROWSEINFO bi;
::ZeroMemory(&bi,sizeof bi);
bi.ulFlags = BIF_RETURNONLYFSDIRS;
// дескриптор окна-владельца диалога
bi.hwndOwner = hWndOwner;
// добавление заголовка к диалогу
bi.lpszTitle = szTitle;
// отображение текущего каталога
bi.lpfn = BrowseCallbackProc;
bi.ulFlags |= BIF_RETURNONLYFSDIRS ;
// установка каталога по умолчанию
bi.lParam = LPARAM(szPath);
// установка корневого каталога
if (szRoot != NULL) {
IShellFolder *pDF;
if (SHGetDesktopFolder(&pDF) == NOERROR) {
LPITEMIDLIST pIdl = NULL;
ULONG chEaten;
ULONG dwAttributes;
USES_CONVERSION;
LPOLESTR oleStr = T2OLE(szRoot);
pDF->ParseDisplayName(NULL,NULL,oleStr,&chEaten,&pIdl,&dwAttributes);
pDF->Release();
bi.pidlRoot = pIdl;
}
}
LPITEMIDLIST pidl = ::SHBrowseForFolder(&bi);
if (pidl != NULL) {
TCHAR lpstrBuffer[_MAX_PATH] = _T("");
SHGetPathFromIDList(pidl, lpstrBuffer);
strSelectedFolder->Format("%s",lpstrBuffer);
result = true;
}
// free memory returned by SHBrowseForFolder
LPMALLOC lpm;
if (SHGetMalloc(&lpm) == NOERROR) lpm->Free(pidl);
return result;
}
//-------------------------------------------------------------------------------------
void CClearSiteDlg::GetCountFile(char* path,char* mask)
{
WIN32_FIND_DATA FileData;
HANDLE hSearch;
char NewPath[MAX_PATH];
char fpath[MAX_PATH];
strcpy(fpath,path);
strcat(fpath,"\\");
strcat(fpath,mask);
if(hSearch=FindFirstFile(fpath,&FileData))
{
if(!(FileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) && strcmp(FileData.cFileName,"..") && strcmp(FileData.cFileName,"."))
{
if (PosNoCase(ExtractFileExt(FileData.cFileName, ext), "htm") || PosNoCase(ExtractFileExt(FileData.cFileName, ext), "php") || (((CString)ExtractFileExt(FileData.cFileName, ext) == ".js") && m_chCleanJSFiles.GetCheck())) // || (ExtractFileExt(FileData.cFileName) == NULL)
{
CountFindFiles++;
}
}
while(FindNextFile(hSearch,&FileData))
{
if(!(FileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) && strcmp(FileData.cFileName,"..") && strcmp(FileData.cFileName,"."))
{
if (PosNoCase(ExtractFileExt(FileData.cFileName, ext), "htm") || PosNoCase(ExtractFileExt(FileData.cFileName, ext), "php") || (((CString)ExtractFileExt(FileData.cFileName, ext) == ".js") && m_chCleanJSFiles.GetCheck()))
{
CountFindFiles++;
}
}
}
}
FindClose(hSearch);//поиск файлов закон?или, теперь ищем подпапки
strcpy(fpath,path);
strcat(fpath,"\\*.*");
if(hSearch=FindFirstFile(fpath,&FileData))
{
if((FileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)&&strcmp(FileData.cFileName,"..")&&strcmp(FileData.cFileName,"."))
{
strcpy(NewPath,path);
strcat(NewPath,"\\");
strcat(NewPath,FileData.cFileName);
GetCountFile(NewPath,mask); //ЭТО НАЗЫВАЕТСЯ "РЕКУРСИЯ"
}
while(FindNextFile(hSearch,&FileData))
{
if((FileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)&&strcmp(FileData.cFileName,"..")&&strcmp(FileData.cFileName,"."))
{
strcpy(NewPath,path);
strcat(NewPath,"\\");
strcat(NewPath,FileData.cFileName);
GetCountFile(NewPath,mask); //ЭТО НАЗЫВАЕТСЯ "РЕКУРСИЯ"
}
}
}
}
//-------------------------------------------------------------------------------------
char* CClearSiteDlg::ExtractFileExt(const char* FileName, char *ext)
{
char dummy[_MAX_PATH];
_splitpath( FileName, dummy, dummy, dummy, ext );
return ext;
}
//-------------------------------------------------------------------------------------
bool CClearSiteDlg::PosNoCase(char* S, char* Substr)
{
if (strstr( _strlwr( _strdup(S)), Substr) == NULL) return false;
else return true;
}
//-------------------------------------------------------------------------------------