c++ MFC 常用代码整理

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



 



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值