常用代码片段集锦

1、遍历删除目录下文件

void    DeleteDirectory( LPCTSTR szDir )
{
	if( !szDir )
		return;

	CString strDir;
	strDir.Format("%s\\*.*",szDir );

	CFileFind filefind;
	BOOL bFind = filefind.FindFile( strDir );

	while( bFind ){
		bFind = filefind.FindNextFile();

		if( filefind.IsDots() || filefind.IsSystem() 
			|| filefind.IsHidden() )
			continue;

		CString strPath = filefind.GetFilePath();
		if( filefind.IsDirectory()){
			DeleteDirectory( strPath );
			RemoveDirectory( strPath );
			continue;
		}
		
		DeleteFile( strPath );
	}
}

2、遍历查找目录下文件

#pragma once

class CFileFindEx
{
public:
	CFileFindEx(void);
	~CFileFindEx(void);
	void Close();
	void CloseContext();
	BOOL FindFile(LPCTSTR pstrName /* = NULL */);
	BOOL FindNextFile();
	CString GetFilePath() const;
	CString GetFileName() const;
	BOOL IsDots() const;
	BOOL IsDirectory() const;
	BOOL DirectoryExist(LPCTSTR Path);
	BOOL IsSystem() const;
	BOOL IsHidden() const;
protected:
	void* m_pFoundInfo;
	void* m_pNextInfo;
	HANDLE m_hContext;
	CString m_strRoot;
	TCHAR m_chDirSeparator;     // not '\\' for Internet classes
}; // end of CFileFindEx

#include "StdAfx.h"
#include "FileFindEx.h"


CFileFindEx::CFileFindEx(void)
{
	m_pFoundInfo = NULL;
	m_pNextInfo = NULL;
	m_hContext = NULL;
	m_chDirSeparator = '\\';
}

CFileFindEx::~CFileFindEx()
{
	Close();
}

void CFileFindEx::Close()
{
	do 
	{
		if (m_pFoundInfo != NULL)
		{
			delete m_pFoundInfo;
			m_pFoundInfo = NULL;
		}

		if (m_pNextInfo != NULL)
		{
			delete m_pNextInfo;
			m_pNextInfo = NULL;
		}

		if (m_hContext != NULL)
		{
			if (m_hContext != INVALID_HANDLE_VALUE)
				CloseContext();
			m_hContext = NULL;
		}
	} while (0);
}

void CFileFindEx::CloseContext()
{
	::FindClose(m_hContext);
	return;
}

BOOL CFileFindEx::FindFile(LPCTSTR pstrName /* = NULL */)
{
	BOOL bResult = FALSE;
	do 
	{
		Close();

		if (pstrName == NULL)
		{
			pstrName = _T("*.*");
		}
		else if (lstrlen(pstrName) >= (_countof(((WIN32_FIND_DATA*) m_pNextInfo)->cFileName)))
		{
			::SetLastError(ERROR_BAD_ARGUMENTS);
			break;
		}

		m_pNextInfo = new WIN32_FIND_DATA;

		WIN32_FIND_DATA *pFindData = (WIN32_FIND_DATA *)m_pNextInfo;

		_tcsncpy_s(pFindData->cFileName, _countof(pFindData->cFileName), pstrName, _TRUNCATE);

		// C:\Users\Administrator\{2DBE85FF-317B-4484-A644-8B8DD06CF8CA}\ /
		m_strRoot = pstrName;
		int nPos = m_strRoot.ReverseFind('\\');
		m_strRoot = m_strRoot.Left(nPos);

		// C:\Users\Administrator\{2DBE85FF-317B-4484-A644-8B8DD06CF8CA}\*.*
		m_hContext = ::FindFirstFile(pstrName, (WIN32_FIND_DATA*) m_pNextInfo);

		if (m_hContext == INVALID_HANDLE_VALUE)
		{
			DWORD dwTemp = ::GetLastError();
			Close();
			::SetLastError(dwTemp);
			break;
		}
		
		bResult = TRUE;

	} while (0);
	
	return bResult;
}

BOOL CFileFindEx::FindNextFile()
{
	BOOL bResult = FALSE;
	do 
	{
		if (m_hContext == NULL)
		{
			break;
		}

		if (m_pFoundInfo == NULL)
		{
			m_pFoundInfo = new WIN32_FIND_DATA;
		}

		void* pTemp = m_pFoundInfo;
		m_pFoundInfo = m_pNextInfo;
		m_pNextInfo = pTemp;

		bResult = ::FindNextFile(m_hContext, (LPWIN32_FIND_DATA) m_pNextInfo);
	} while (0);

	return bResult;	
}

CString CFileFindEx::GetFilePath() const
{
	CString strResult = m_strRoot;
	do 
	{
		LPCTSTR pszResult;
		LPCTSTR pchLast;
		pszResult = strResult;
		pchLast = _tcsdec( pszResult, pszResult+strResult.GetLength() );
		if ((*pchLast != _T('\\')) && (*pchLast != _T('/')))
			strResult += m_chDirSeparator;
		strResult += GetFileName();
	} while (0);
	
	return strResult;
}

CString CFileFindEx::GetFileName() const
{
	CString ret;
	do 
	{
		if (m_pFoundInfo != NULL)
		{
			ret = ((LPWIN32_FIND_DATA) m_pFoundInfo)->cFileName;
		}
	} while (0);
	
	return ret;
}

BOOL CFileFindEx::IsDots() const
{
	// return TRUE if the file name is "." or ".." and
	// the file is a directory

	BOOL bResult = FALSE;
	do 
	{
		if (m_pFoundInfo != NULL && IsDirectory())
		{
			LPWIN32_FIND_DATA pFindData = (LPWIN32_FIND_DATA) m_pFoundInfo;
			if (pFindData->cFileName[0] == '.')
			{
				if (pFindData->cFileName[1] == '\0' ||
					(pFindData->cFileName[1] == '.' &&
					pFindData->cFileName[2] == '\0'))
				{
					bResult = TRUE;
				}
			}
		}
	} while (0);
	
	return bResult;
}

BOOL CFileFindEx::IsDirectory() const
{
	BOOL bResult = FALSE;
	do 
	{
		if (m_pFoundInfo != NULL)
		{
			LPWIN32_FIND_DATA pFindData = (LPWIN32_FIND_DATA) m_pFoundInfo;
			bResult = pFindData->dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY;
		}
	} while (0);
	
	return bResult;
}

BOOL CFileFindEx::IsSystem() const
{
	BOOL bResult = FALSE;
	do 
	{
		if (m_pFoundInfo != NULL)
		{
			LPWIN32_FIND_DATA pFindData = (LPWIN32_FIND_DATA) m_pFoundInfo;
			bResult = pFindData->dwFileAttributes & FILE_ATTRIBUTE_SYSTEM;
		}
	} while (0);

	return bResult;
}

BOOL CFileFindEx::IsHidden() const
{
	BOOL bResult = FALSE;
	do 
	{
		if (m_pFoundInfo != NULL)
		{
			LPWIN32_FIND_DATA pFindData = (LPWIN32_FIND_DATA) m_pFoundInfo;
			bResult = pFindData->dwFileAttributes & FILE_ATTRIBUTE_HIDDEN;
		}
	} while (0);

	return bResult;
}

BOOL CFileFindEx::DirectoryExist(LPCTSTR Path)
{
 BOOL ret = FALSE;
 do 
 {
	WIN32_FIND_DATA fd;
	HANDLE hFind = ::FindFirstFile(Path, &fd);
	if ((hFind != INVALID_HANDLE_VALUE) && (fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))
	{
		ret = TRUE; // 目录存在 
	}

	::FindClose(hFind);
 } while (0);

 return ret;
}

3、浏览文件夹和选择文件、选择颜色

#pragma once

class CBrowseFile
{
public:
	CBrowseFile(void);
	~CBrowseFile(void);

public:
	// @desc : Select file/folder
	static BOOL SelectFolder(HWND hWnd, LPCTSTR lpstrTitle, TCHAR* szFolder);
	static BOOL SelectFile(HWND hWnd, LPCTSTR lpstrInitialDir, LPCTSTR lpstrFilter, TCHAR* szFile);

	// @desc : Select color
	static BOOL SelectColor(CHOOSECOLOR& crColor);
	static BOOL SelectColor(HWND hWnd, COLORREF crCurrent, DWORD dwFlags, COLORREF& crChoose);
};

#include "StdAfx.h"
#include "BrowseFile.h"

CBrowseFile::CBrowseFile(void)
{
}

CBrowseFile::~CBrowseFile(void)
{
}

INT CALLBACK BFFHookProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
	switch(uMsg) 
	{
	case BFFM_INITIALIZED: 
		CWindowProcessor::CenterWindow(hWnd);
		// WParam is TRUE since you are passing a path.
		// It would be FALSE if you were passing a pidl.
		//SendMessage(hwnd, BFFM_SETSELECTION, TRUE, (LPARAM)pData);
		break;
	case BFFM_SELCHANGED: 
		// Set the status window to the currently selected path.
		//if (SHGetPathFromIDList((LPITEMIDLIST)lParam ,szDir))
		//{
		//	SendMessage(hwnd,BFFM_SETSTATUSTEXT,0,(LPARAM)szDir);
		//}
		break;
	}
	return 0L;
}

BOOL CBrowseFile::SelectFolder(HWND hWnd, LPCTSTR lpstrTitle, TCHAR* szFolder)
{
	BROWSEINFO bi; 
	ITEMIDLIST *pidl; 
	TCHAR  szPath[MAX_PATH];

	memset( &bi, 0, sizeof(bi) );
	bi.hwndOwner = hWnd; 
	bi.pidlRoot = NULL; 
	bi.pszDisplayName = szPath; 
	bi.lpszTitle = lpstrTitle; 
	bi.ulFlags = BIF_RETURNONLYFSDIRS;
	bi.lpfn = (BFFCALLBACK)BFFHookProc; 
	bi.lParam = 0; 
	bi.iImage = 0;
	pidl = SHBrowseForFolder( &bi );
	if( pidl )
	{
		SHGetPathFromIDList(pidl, szFolder);
		LPMALLOC lpMalloc;
		if(SUCCEEDED(SHGetMalloc(&lpMalloc)))
		{
			lpMalloc->Free( pidl );
			lpMalloc->Release();
		}
		return TRUE;
	}
	return FALSE;    
}

/***********************  
使Open或Save对话框居中  
***********************/
UINT_PTR CALLBACK OFNHookProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
	switch(uMsg)
	{
		//case WM_SHOWWINDOW:
	case WM_INITDIALOG:
		CWindowProcessor::CenterWindow(GetParent(hWnd));
		break;
		{	
			HWND hOwnerWnd = GetWindow(hWnd, GW_OWNER);
			HWND hParent = GetParent(hWnd);
			if (hOwnerWnd != NULL)
			{
				RECT rtWnd,sysRect;   
				::GetWindowRect(hOwnerWnd, &rtWnd);   
				::SystemParametersInfo(SPI_GETWORKAREA, 0, &sysRect, 0);   

				::MoveWindow(hOwnerWnd,   
					(sysRect.right-(rtWnd.right-rtWnd.left))/2,   
					(sysRect.bottom-(rtWnd.bottom-rtWnd.top))/2,   
					rtWnd.right-rtWnd.left,   
					rtWnd.bottom-rtWnd.top,   
					true);
			}
			else if (hParent != NULL)
			{
				RECT rtWnd,sysRect;   
				::GetWindowRect(hParent, &rtWnd);   
				::SystemParametersInfo(SPI_GETWORKAREA, 0, &sysRect, 0);   

				::MoveWindow(hParent,   
					(sysRect.right-(rtWnd.right-rtWnd.left))/2,   
					(sysRect.bottom-(rtWnd.bottom-rtWnd.top))/2,   
					rtWnd.right-rtWnd.left,   
					rtWnd.bottom-rtWnd.top,   
					true);
			}
			else
			{
				int scrWidth,scrHeight;
				RECT rect;

				//获得屏幕尺寸
				scrWidth=GetSystemMetrics(SM_CXSCREEN);
				scrHeight=GetSystemMetrics(SM_CYSCREEN);

				//获取窗体尺寸
				GetWindowRect(hWnd, &rect);
				rect.left=(scrWidth-rect.right)/2;
				rect.top=(scrHeight-rect.bottom)/2;

				//设置窗体位置
				SetWindowPos(hWnd, HWND_TOP,rect.left,rect.top,rect.right,rect.bottom,SWP_SHOWWINDOW);
			}

		}
		break;

	default:
		break;
	}
	return 0L;
}

BOOL CBrowseFile::SelectFile(HWND hWnd, LPCTSTR lpstrInitialDir, LPCTSTR lpstrFilter, TCHAR* szFile)
{
	// 打开文件打开对话框,如果选中文件 
	OPENFILENAME ofn;     
	
	// 初始化选择文件对话框。   
	ZeroMemory(&ofn, sizeof(ofn));
	ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST | OFN_ENABLEHOOK | OFN_EXPLORER | OFN_ENABLEHOOK;
	//ofn.Flags = OFN_EXPLORER | OFN_HIDEREADONLY | OFN_ENABLEHOOK;
	//OFN_ALLOWMULTISELECT | OFN_EXPLORER | OFN_FILEMUSTEXIST |OFN_PATHMUSTEXIST | OFN_HIDEREADONLY| 
	//	OFN_ENABLETEMPLATE | OFN_ENABLEHOOK |OFN_ENABLESIZING;    
	ofn.lStructSize = sizeof(ofn);  
	ofn.hwndOwner = hWnd;  
	ofn.lpstrFile = szFile; 
	ofn.hInstance = NULL;

	//   
	ofn.lpstrFile[0] = 0;  
	ofn.nMaxFile = MAX_PATH * sizeof(TCHAR);
	ofn.lpstrFilter = lpstrFilter;  
	ofn.nFilterIndex = 1;  
	ofn.lpstrFileTitle = NULL;  
	ofn.nMaxFileTitle = 0;  
	ofn.lpstrInitialDir = lpstrInitialDir;
	ofn.lpfnHook = (LPOFNHOOKPROC)OFNHookProc; 

	// 显示打开选择文件对话框。   
	if ( !GetOpenFileName(&ofn) )   
		return FALSE;

	return TRUE;
}

/***********************  
界面居中  
***********************/
UINT_PTR CALLBACK CCHookProc(HWND hdlg,
							 UINT uiMsg,
							 WPARAM wParam,
							 LPARAM lParam
							 )
{
	switch(uiMsg)
	{
	case WM_SHOWWINDOW:
		CWindowProcessor::CenterWindow(hdlg);
		break;

	default:
		break;
	}
	return 0L;
}

BOOL CBrowseFile::SelectColor(CHOOSECOLOR& crColor)
{
	// @desc : 添加过程钩子
	if (crColor.lpfnHook == NULL)
	{
		crColor.Flags |= CC_ENABLEHOOK;
		crColor.lpfnHook = (LPCCHOOKPROC)CCHookProc; 
	}
	return ChooseColor(&crColor);
}

BOOL CBrowseFile::SelectColor(HWND hWnd, COLORREF crCurrent, DWORD dwFlags, COLORREF& crChoose)
{
	CHOOSECOLOR cColor;
	ZeroMemory(&cColor, sizeof(CHOOSECOLOR));
	cColor.lStructSize = sizeof(CHOOSECOLOR);
	cColor.hwndOwner = hWnd;
	cColor.hInstance = NULL;
	cColor.rgbResult = 0;
	cColor.lpCustColors = &crCurrent;
	cColor.Flags = dwFlags;
	cColor.lCustData = 0;

	cColor.Flags |= CC_ENABLEHOOK;
	cColor.lpfnHook = (LPCCHOOKPROC)CCHookProc; 

	cColor.lpTemplateName = NULL;
	if (ChooseColor(&cColor) == TRUE)
	{
		crChoose = cColor.rgbResult;
		return TRUE;
	}
	return FALSE;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值