文件监控程序 MFC源码

来源:互联网 发布:名片设计制作软件 编辑:程序博客网 时间:2024/04/27 13:56
<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;BOOLm_bAddNew0;BOOLm_bDel0;BOOLm_bRename0;BOOLm_bModify0;BOOLm_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;}

0 0
原创粉丝点击