常用代码片段集锦
2014-03-17 09:34
555 查看
1、遍历删除目录下文件
2、遍历查找目录下文件
3、浏览文件夹和选择文件、选择颜色
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; }
相关文章推荐
- QT OSG 浏览器插件 ,将OSG嵌入到IE中
- J2EE Java黑客大曝光:开发安全的Java应用程序
- csdn 英雄会第四届在线编程大赛·线上初赛:带通配符的数
- Windows Server 2003安装ASP.NET浅析
- 使用Spring框架的12个开源项目【转】
- asp网站如何设置默认页_IIS 7.5 在 Windows Server(R) 2008 R2
- 2013级C++第4周(春)项目——再和对象找感觉【项目4 - 数组作数据成员】
- Eclipse插件安装的三种方法
- 动态内存分配(C++)
- matlab的小技巧
- ASP.NET MVC实现POST方式的Redirect
- 利用Github自建的个人博客空间
- Struts 中的一个action 包含多个请求
- C语言实现的快速排序,采用分治策略,递归实现
- Python类里的静态方法函数
- Java的对象驻留
- PHP $_SERVER 变量
- Google的 FindBugs 实践
- Java BIO、NIO、AIO 学习
- spring quartz定时器