文件监控程序 MFC源码

<pre name="code" class="cpp">//成员变量

	CString m_strWatchedDir;<span style="white-space:pre">				</span>//存放文件路径
	HANDLE m_hThread;<span style="white-space:pre">					</span>
	HANDLE hDir;	

	BOOL	m_bAddNew0;
	BOOL	m_bDel0;
	BOOL	m_bRename0;
	BOOL	m_bModify0;
	BOOL	m_bOther0;

	char*   m_szi;
	int	    m_i;


 

线程 用于监控文件夹

DWORD WINAPI <span style="font-family: Arial, Helvetica, sans-serif;">CDlg</span>::ThreadProc( LPVOID lParam )  //线程函数
{
	<span style="font-family: Arial, Helvetica, sans-serif;">CDlg</span><span style="font-family: Arial, Helvetica, sans-serif;">* obj = (</span><span style="font-family: Arial, Helvetica, sans-serif;">CDlg</span><span style="font-family: Arial, Helvetica, sans-serif;">*)lParam;  //参数转化</span>


	obj->m_szi = new char[20];


	obj->hDir = CreateFile(            //打开目录,得到目录的句柄
		obj->m_strWatchedDir,
		GENERIC_READ|GENERIC_WRITE,
		FILE_SHARE_READ|FILE_SHARE_WRITE|FILE_SHARE_DELETE,
		NULL,
		OPEN_EXISTING,
		FILE_FLAG_BACKUP_SEMANTICS,
		NULL
		); 
	if(obj->hDir ==INVALID_HANDLE_VALUE  ) 
		return false;

	char buf[(sizeof(FILE_NOTIFY_INFORMATION)+MAX_PATH)*2];
	FILE_NOTIFY_INFORMATION* pNotify=(FILE_NOTIFY_INFORMATION*)buf;
	DWORD dwBytesReturned;        
	while(true)
	{
		if( ::ReadDirectoryChangesW( obj->hDir,
			pNotify,
			sizeof(buf),
			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,
			&dwBytesReturned,
			NULL,
			NULL ) )
		{
			char tmp[MAX_PATH], str1[MAX_PATH], str2[MAX_PATH];
			memset( tmp, 0, sizeof(tmp) ); //ZeroMemory()
			WideCharToMultiByte( CP_ACP,0,pNotify->FileName,pNotify->FileNameLength/2,tmp,99,NULL,NULL );
			strcpy( str1, tmp );

			if(pNotify->NextEntryOffset !=0 )
			{
				PFILE_NOTIFY_INFORMATION p = (PFILE_NOTIFY_INFORMATION)((char*)pNotify+pNotify->NextEntryOffset);
				memset( tmp, 0, sizeof(tmp) );
				WideCharToMultiByte( CP_ACP,0,p->FileName,p->FileNameLength/2,tmp,99,NULL,NULL );
				strcpy( str2, tmp );
			}
			switch(pNotify->Action)
			{				
			case FILE_ACTION_ADDED:
				if(obj->m_bAddNew0)
				{
					obj->m_list.AddString(L"添加了新文件");
				}
				break;

			case FILE_ACTION_REMOVED:
				if(obj->m_bDel0)
				{
					obj->m_list.AddString(L"删除了文件");
				}
				break;

			case FILE_ACTION_RENAMED_NEW_NAME:
				if(obj->m_bRename0)
				{
					obj->m_list.AddString(L"重命名了文件");
				}
				break;

			case FILE_ACTION_RENAMED_OLD_NAME:
				if(obj->m_bRename0)
				{
					/*CTime tt=CTime::GetCurrentTime();	
					CString strTT;
					strTT.Format(L"%d:%d:%d",tt.GetHour(),tt.GetMinute(),tt.GetSecond());
					obj->m_list.InsertItem(0,obj->m_szi);
					obj->m_list.SetItemText(0,2,"重命名了文件");
					strcat(str1," 改名为 ");
					obj->m_list.SetItemText(0,3,strcat(str1,str2));
					obj->m_list.SetItemText(0,1,strTT);*/
				}
				break;

			case FILE_ACTION_MODIFIED:
				if(obj->m_bModify0)
				{
					obj->m_list.AddString(L"修改了文件");
				}
				break;  

			default:
				if(obj->m_bOther0)
				{
					obj->m_list.AddString(L"未知变化");
				}
				break;  
			}	
			obj->m_i++;		
			itoa(obj->m_i,obj->m_szi,10);		
		}
		else           
			break;           
	}
	return 0;
}

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值