QQ登录

只需一步,快速开始

217上位机VC MFC监视指定文件夹内文件操作

[ 复制链接 ]

217上位机VC MFC监视指定文件夹内文件操作

217上位机VC MFC监视指定文件夹内文件操作
217上位机VC MFC监视指定文件夹内文件操作
功能展示
有时我们不想某一文件夹内文件被用户修改,我们就得监视此文件夹,当用户修改了文件夹内的文件时,我们监视到后就可以做出进一步的处理,当前例程实现指定文件夹的监视,会将所监视到的操作全部罗列出来,显示在列表框中,效果如图;
要点提示
监视指定文件夹可以使用函数ReadDirectoryChangesW() 函数原型和参数说明为:
BOOL ReadDirectoryChangesW( HANDLE hDirectory, //对目录进行监视的句柄
LPVOID lpBuffer, //指向DWORD类型的缓冲区,其中可以将获取的数据结果将其返回
DWORD nBufferLength, //指lpBuffer的缓冲区的大小值,以字节为单位
BOOL bWatchSubtree, //监视目录. 一般选择 TRUE
DWORD dwNotifyFilter, //对文件过滤的方式和标准,有众多选择可以查阅MSDN手册或例程源码
LPDWORD lpBytesReturned, //  将接收的字节数转入lpBuffer参数
LPOVERLAPPED lpOverlapped, // 异步IO结构体指针,一般选择 NULL
LPOVERLAPPED_COMPLETION_ROUTINElpCompletionRoutine// 完成用函数指针 一般选择 NULL );
文件夹的监视得连续不间断进行,例程中开启一线程进行监控,避免了程序界面的假死现象;
实现功能
1.新建基于对话框的应用程序
2.拖拽按钮<选择要监视文件夹><开始监视><停止监视>关联函数,添加一编辑框ID为IDC_EDIT1,用于显示要监视的文件夹路径,添加一列表框控件ID为IDC_LIST1用于显示监视的结果;
在主对话框中添加变量private: int    m_nIndex;//事件的索引CString m_sDir;//要监视文件夹目录 HANDLE  m_hDir;//要监视的打开的文件夹名柄  HANDLE  m_hThread;//线程句柄
在对话框的OnInitDialog()函数中初始化m_nIndex=0;//文件夹发生事件索引
  CListCtrl* pListCtrl =(CListCtrl*)GetDlgItem(IDC_LIST1);
  pListCtrl->ModifyStyle(LVS_TYPEMASK,LVS_REPORT);
  pListCtrl->SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_FLATSB|LVS_EX_TWOCLICKACTIVATE|LVS_EX_GRIDLINES);
  pListCtrl->InsertColumn(0,"索引",LVCFMT_LEFT,40);
  pListCtrl->InsertColumn(1,"时间",LVCFMT_LEFT,80);
  pListCtrl->InsertColumn(2,"事件类型",LVCFMT_LEFT,100);
  pListCtrl->InsertColumn(3,"事件内容",LVCFMT_LEFT,500);
3.添加自定义函数void MoniterFolder();用于监视指定的文件夹,此函数体部分可在例程中查看;
下面是按钮的代码部分
  1. void CGkbc8Dlg::OnStop()
  2. {
  3.         if(m_hThread !=NULL)
  4.         {
  5.                 ::TerminateThread(m_hThread, 0 );
  6.                 m_hThread = NULL;
  7.         }
  8.         
复制代码
  1. if(m_hDir !=INVALID_HANDLE_VALUE)
  2.         {
  3.                 CloseHandle( m_hDir );
  4.                 m_hDir = INVALID_HANDLE_VALUE;
  5.         }        
  6. }
  7. void CGkbc8Dlg::OnStart()
  8. {
  9.         if(m_sDir.IsEmpty())
  10.                 return;
  11.         DWORD ThreadId;  //创建一个新线程用于监视
  12.         m_hThread=::CreateThread(NULL,0,ThreadProc,this,0,&ThreadId );
  13. } void CGkbc8Dlg::OnChoose()
  14. {
  15.         BROWSEINFO bif;
  16.         char buf[MAX_PATH];
  17.         ZeroMemory(&bif,sizeof(BROWSEINFO));
  18.         bif.hwndOwner=m_hWnd;
  19.         bif.lpszTitle="选择文件夹";
  20.         bif.pszDisplayName=buf;
  21.         bif.ulFlags=BIF_EDITBOX;
  22.         LPITEMIDLIST pil;
  23.         pil=SHBrowseForFolder(&bif);
  24.         if(pil!=NULL)
  25.         {
  26.                 SHGetPathFromIDList(pil,buf);
  27.                 m_sDir=buf;
  28.                 SetDlgItemText(IDC_EDIT1,buf);
  29.         }
  30. }
复制代码
再在程序退出时 调用一次OnStop(); //终止线程以及在stdafx.h头文件中添加代码#define _WIN32_WINNT 0x0500//记得添加
我们来演示下功能实现的整个过程
请点击此处下载

请先注册会员后在进行下载

已注册会员,请先登录后下载

文件名称:217.上位机VC MFC监视指定文件夹内文件操作.rar 
文件大小:155.22 KB  售价:10金币
下载权限: 不限 以上或 VIP会员   [购买捐助会员]   [充值积分]   有问题联系我

  

您的支持是我们创作的动力!  

  

您可花点闲钱积分自助任意充值

  

成为VIP会员 全站资源任意下载永久更新!


回复

使用道具 举报

快速回复 返回列表 客服中心 搜索