您的位置:首页 > 编程语言

常用代码片段集锦

2014-03-17 09:34 555 查看
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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: