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;}



 



原创粉丝点击