c++ MFC 常用代码整理
来源:互联网 发布:mac book pro 虚拟机 编辑:程序博客网 时间:2024/06/05 23:36
1.创建指定文件夹
BOOL CreateLeadoutPath( LPCTSTR lpPathName){ BOOL fRet = TRUE; TCHAR szFileName[MAX_PATH] = { 0 }; TCHAR* lpChr = NULL; TCHAR* lpHead = NULL; if(lpPathName== NULL || *lpPathName== '\0'){return FALSE;} lstrcpyn(szFileName, lpPathName, sizeof(szFileName)-1); lpHead = PathSkipRoot(szFileName); while (true) { lpChr = _tcschr(lpHead, _T('\\')); if (NULL == lpChr) { fRet &= CreateDirectory(szFileName, NULL); if (!fRet && (GetLastError() == ERROR_ALREADY_EXISTS)) fRet = TRUE; break; } else { *lpChr = NULL; fRet &= CreateDirectory(szFileName, NULL); if (!fRet && (GetLastError() == ERROR_ALREADY_EXISTS)) fRet = TRUE; *lpChr = _T('\\'); lpHead = lpChr+1; } } return fRet;}
2.添加文件夹中文件全路径到vector中
void CFileTypeRecognitioner::get_all_files( CString folderpath, std::vector<CString>& files_vec ){CStringArray dirs;CString filename;CFileFind filefinder;dirs.Add(folderpath);BOOL bRet;while(dirs.GetSize() > 0){filename = dirs[0] + "\\*.*";dirs.RemoveAt(0);bRet = filefinder.FindFile(filename, 0);while(bRet){bRet = filefinder.FindNextFile();if(filefinder.IsDots()){continue;}else if (filefinder.IsDirectory()){dirs.Add(filefinder.GetFilePath());continue;}else{files_vec.push_back(filefinder.GetFilePath());}}}filefinder.Close();}
3.清空文件夹
void DeleteFolder(CString sPath) { CFileFind ff; BOOL bFound; bFound = ff.FindFile(sPath + "\\*.* "); while(bFound) { bFound = ff.FindNextFile(); CString sFilePath = ff.GetFilePath(); if(ff.IsDirectory()) { if(!ff.IsDots()) DeleteFolder(sFilePath); } else { if(ff.IsReadOnly()) { SetFileAttributes(sFilePath, FILE_ATTRIBUTE_NORMAL); } DeleteFile(sFilePath); } } ff.Close(); SetFileAttributes(sPath, FILE_ATTRIBUTE_NORMAL); }
4.在程序中调用其它exe程序。(实例为调用7z.exe进行解压缩)
TCHAR path[MAX_PATH]; ::GetModuleFileName(NULL,path,MAX_PATH); CString strExeRunPath; strExeRunPath.Format("%s",path); strExeRunPath = strExeRunPath.Left(strExeRunPath.ReverseFind('\\'));
//拼接需要传递的参数 CString strComline ; strComline = "7z x -y -pa \"" + strSrcFullFilePath + "\" -o\"" + strDesDirPath + "\""; char * pComline = strComline.GetBuffer(0); strComline.ReleaseBuffer(); //调用7z STARTUPINFO si; PROCESS_INFORMATION pi; ZeroMemory(&si, sizeof(si)); si.cb = sizeof(si); ZeroMemory( &pi, sizeof(pi)); CString strTemp; strTemp.Format("%s",pComline); OutputDebugString("@@7z.exe参数:" + strTemp); if(!CreateProcess(strExeRunPath + "\\7z.exe", pComline,NULL,NULL,FALSE,CREATE_NO_WINDOW,NULL,NULL,&si,&pi)) { OutputDebugString("创建解压进程失败"); return 3; } WaitForSingleObject(pi.hProcess,INFINITE); CloseHandle(pi.hProcess); CloseHandle(pi.hThread);
5.监视文件夹变化
//线程管理DWORD WINAPI CFil::ThreadProc( LPVOID lParam ) {//参数转换CFil* objDlg = (CFil*)lParam;//创建文件,打开目录,得到目录句柄objDlg->m_hDir = CreateFile(objDlg->m_strPathName, GENERIC_READ|GENERIC_WRITE, FILE_SHARE_READ|FILE_SHARE_WRITE|FILE_SHARE_DELETE, NULL, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, NULL);//创建成功与否判断if (objDlg->m_hDir == INVALID_HANDLE_VALUE){return FALSE;}// 获取监控的返回值char bufTemp[(sizeof(FILE_NOTIFY_INFORMATION)+MAX_PATH)*2];FILE_NOTIFY_INFORMATION* pNotify = (FILE_NOTIFY_INFORMATION*)bufTemp;DWORD dwReturn;int Num=0; //显示记录条数while (TRUE){//检测目录发生变化if (::ReadDirectoryChangesW(objDlg->m_hDir, pNotify, sizeof(bufTemp), true, FILE_NOTIFY_CHANGE_FILE_NAME|FILE_NOTIFY_CHANGE_DIR_NAME|FILE_NOTIFY_CHANGE_ATTRIBUTES|FILE_NOTIFY_CHANGE_SIZE|FILE_NOTIFY_CHANGE_LAST_WRITE|FILE_NOTIFY_CHANGE_LAST_ACCESS|FILE_NOTIFY_CHANGE_CREATION|FILE_NOTIFY_CHANGE_SECURITY,&dwReturn, NULL, NULL)){//获取当前时间CTime time = CTime::GetCurrentTime();CString strTime;strTime.Format("%d:%d:%d", time.GetHour(), time.GetMinute(), time.GetSecond());//获取变化的文件名char strName[MAX_PATH];memset(strName, 0, sizeof(strName) );WideCharToMultiByte(CP_ACP, 0, pNotify->FileName, pNotify->FileNameLength/2, strName, 99, NULL, NULL);//监视动作switch (pNotify->Action){case FILE_ACTION_ADDED: // The file was added to the directory{objDlg->m_list.InsertItem(0, objDlg->m_cNumber);objDlg->m_list.SetItemText(0, 1, strTime);objDlg->m_list.SetItemText(0, 2, "添加了文件");objDlg->m_list.SetItemText(0, 3, strName);break;}case FILE_ACTION_REMOVED: // The file was removed from the directory{objDlg->m_list.InsertItem(0, objDlg->m_cNumber);objDlg->m_list.SetItemText(0, 1, strTime);objDlg->m_list.SetItemText(0, 2, "删除了文件");objDlg->m_list.SetItemText(0, 3, strName);break;}case FILE_ACTION_MODIFIED: // The file was modified{objDlg->m_list.InsertItem(0, objDlg->m_cNumber);objDlg->m_list.SetItemText(0, 1, strTime);objDlg->m_list.SetItemText(0, 2, "修改了文件");objDlg->m_list.SetItemText(0, 3, strName);break;}case FILE_ACTION_RENAMED_OLD_NAME: // The file was renamed and this is the old name{objDlg->m_list.InsertItem(0, objDlg->m_cNumber);objDlg->m_list.SetItemText(0, 1, strTime);objDlg->m_list.SetItemText(0, 2, "重命名了文件");objDlg->m_list.SetItemText(0, 3, strName);break;}case FILE_ACTION_RENAMED_NEW_NAME: // The file was renamed and this is the new name{objDlg->m_list.InsertItem(0, objDlg->m_cNumber);objDlg->m_list.SetItemText(0, 1, strTime);objDlg->m_list.SetItemText(0, 2, "重命名了文件");objDlg->m_list.SetItemText(0, 3, strName);break;}default:{objDlg->m_list.InsertItem(0, objDlg->m_cNumber);objDlg->m_list.SetItemText(0, 1, strTime);objDlg->m_list.SetItemText(0, 2, "未发生变化");objDlg->m_list.SetItemText(0, 3, strName);break;}}Num++;objDlg->m_nNumber++; // 序号加一itoa(objDlg->m_nNumber, objDlg->m_cNumber, 10); // 整型转换成字符型}else {break; }CString str;str.Format("%d",Num);str += "条记录";objDlg->SetDlgItemText(IDC_STATIC_LOG,str);}return 0;}
- c++ MFC 常用代码整理
- MFC常用函数整理
- MFC常用函数整理
- V9常用代码整理
- 常用代码整理
- IOS常用代码整理
- 常用代码整理
- IOS常用代码整理
- IOS常用代码整理
- IOS 常用代码整理
- IOS常用代码整理
- 常用socket代码整理
- 常用代码整理
- oc常用代码整理
- NSIS常用代码整理
- 常用代码片段整理
- 常用javascript代码整理
- 常用代码整理
- joomla mod_fpss 修改细节
- 详细解析Java中抽象类和接口的区别
- 定时器的实现、java定时器介绍与Spring中定时器的配置
- Python Print函数用法
- Android ActivityGroup和ViewFlipper实现两个Activity滑动(animation.translate)切换
- c++ MFC 常用代码整理
- 亚洲销售女神徐鹤宁经典语录——太过精辟,不学必悔
- boost circular_buffer的使用
- 修改sqlnet.ora,限制指定IP登录数据库
- Android中权限配置详细全解
- resin3.1处理utf-8格式的jsp时存在的问题
- android 2.1 监听电话状态并自动接听来电
- Linux程序性能调优命令集合
- 修改APACHE中,关于主机IP地址修改的问题