(转)FindFirstChangeNotification,创建一个文件通知对象,该对象用于监视文件系统发生的变化

转载 2013年12月05日 11:27:37

FindFirstChangeNotification

VB声明
Declare Function FindFirstChangeNotification Lib "kernel32" Alias "FindFirstChangeNotificationA" (ByVal lpPathName As String, ByVal bWatchSubtree As Long, ByVal dwNotifyFilter As Long) As Long
说明
创建一个文件通知对象。该对象用于监视文件系统发生的变化
返回值
Long,如成功,返回一个改变通知对象的句柄;INVALID_HANDLE_VALUE表示失败。会设置GetLastError
参数表
参数 类型及说明
lpPathName String,要监视的目录
bWatchSubtree Long,如果为TRUE,表示监视lpPathName的所有子目录
dwNotifyFilter Long,带有前缀FILE_NOTIFY_CHANGE_???前缀的一个或多个常数,它们指定了对象发出信号的条件
注解

FindCloseChangeNotification函数关闭句柄,不要用CloseHandle函数

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

#include <windows.h>
#include <stdlib.h>
#include <stdio.h>
#include <tchar.h>

void RefreshDirectory(LPTSTR);
void RefreshTree(LPTSTR);

void WatchDirectory(LPTSTR lpDir)
{
   DWORD dwWaitStatus; 
   HANDLE dwChangeHandles[2]; 
   TCHAR lpDrive[4];
   TCHAR lpFile[_MAX_FNAME];
   TCHAR lpExt[_MAX_EXT];

   _tsplitpath(lpDir, lpDrive, NULL, lpFile, lpExt);

   lpDrive[2] = (TCHAR)'//';
   lpDrive[3] = (TCHAR)'/0';
 
// Watch the directory for file creation and deletion. 
 
   dwChangeHandles[0] = FindFirstChangeNotification( 
      lpDir,                         // directory to watch 
      FALSE,                         // do not watch subtree 
      FILE_NOTIFY_CHANGE_FILE_NAME); // watch file name changes 
 
   if (dwChangeHandles[0] == INVALID_HANDLE_VALUE) 
      ExitProcess(GetLastError()); 
 
// Watch the subtree for directory creation and deletion. 
 
   dwChangeHandles[1] = FindFirstChangeNotification( 
      lpDrive,                       // directory to watch 
      TRUE,                          // watch the subtree 
      FILE_NOTIFY_CHANGE_DIR_NAME);  // watch dir. name changes 
 
   if (dwChangeHandles[1] == INVALID_HANDLE_VALUE) 
      ExitProcess(GetLastError()); 
 
// Change notification is set. Now wait on both notification 
// handles and refresh accordingly. 
 
   while (TRUE) 
   { 
   // Wait for notification.
 
      dwWaitStatus = WaitForMultipleObjects(2, dwChangeHandles, 
         FALSE, INFINITE); 
 
      switch (dwWaitStatus) 
      { 
         case WAIT_OBJECT_0: 
 
         // A file was created or deleted in the directory.
         // Refresh this directory and restart the notification.
 
            RefreshDirectory(lpDir); 
            if ( FindNextChangeNotification( 
                    dwChangeHandles[0]) == FALSE ) 
                ExitProcess(GetLastError()); 
            break; 
 
         case WAIT_OBJECT_0 + 1: 
 
         // A directory was created or deleted in the subtree.
         // Refresh the tree and restart the notification.
 
            RefreshTree(lpDrive); 
            if (FindNextChangeNotification( 
                    dwChangeHandles[1]) == FALSE) 
                ExitProcess(GetLastError()); 
            break; 
 
        default: 
            ExitProcess(GetLastError()); 
      }
   }
}

void RefreshDirectory(LPTSTR lpDir)
{
   _tprintf(TEXT("Refresh the directory (%s)./n"), lpDir);
}

void RefreshTree(LPTSTR lpDrive)
{
   _tprintf(TEXT("Refresh the directory tree (%s)./n"), lpDrive);
}
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
from msdn: Monitoring Changes in a Directory or Directory Tree The following example monitors the directory tree starting at C:/ for directory name changes. It also monitors the C:/WINDOWS directory for file name changes.  The example uses the FindFirstChangeNotification function to create two notification handles and the WaitForMultipleObjects function to wait on the handles. Whenever a directory is created or deleted in the tree starting at C:/ , the example updates the entire directory tree. Whenever a file is created or deleted in the C:/WINDOWS directory, the example refreshes the WINDOWS directory. The FindNextChangeNotification function restarts the change notification each time the example processes a change.  DWORD dwWaitStatus;  HANDLE dwChangeHandles[2];    // Watch the C:/WINDOWS directory for file creation and  // deletion.    dwChangeHandles[0] = FindFirstChangeNotification(      "C://WINDOWS",                 // directory to watch      FALSE,                         // do not watch the subtree      FILE_NOTIFY_CHANGE_FILE_NAME); // watch file name changes    if (dwChangeHandles[0] == INVALID_HANDLE_VALUE)      ExitProcess(GetLastError());    // Watch the C:/ subtree for directory creation and  // deletion.    dwChangeHandles[1] = FindFirstChangeNotification(      "C://",                        // directory to watch      TRUE,                          // watch the subtree      FILE_NOTIFY_CHANGE_DIR_NAME);  // watch dir. name changes    if (dwChangeHandles[1] == INVALID_HANDLE_VALUE)      ExitProcess(GetLastError());    // Change notification is set. Now wait on both notification  // handles and refresh accordingly.    while (TRUE)  {        // Wait for notification.       dwWaitStatus = WaitForMultipleObjects(2, dwChangeHandles,          FALSE, INFINITE);        switch (dwWaitStatus)      {          case WAIT_OBJECT_0:            // A file was created or deleted in C:/WINDOWS.          // Refresh this directory and restart the          // change notification. RefreshDirectory is an          // application-defined function.                RefreshDirectory("C://WINDOWS")              if ( FindNextChangeNotification(                      dwChangeHandles[0]) == FALSE )                  ExitProcess(GetLastError());              break;            case WAIT_OBJECT_0 + 1:            // A directory was created or deleted in C:/.          // Refresh the directory tree and restart the          // change notification. RefreshTree is an          // application-defined function.                RefreshTree("C://");              if (FindNextChangeNotification(                      dwChangeHandles[1]) == FALSE)                  ExitProcess(GetLastError());              break;            default:              ExitProcess(GetLastError());      }  }

转自:http://blog.csdn.net/zhaoyawei/article/details/742276

FindFirstChangeNotification,创建一个文件通知对象,该对象用于监视文件系统发生的变化

FindFirstChangeNotification ...
  • zhaoyawei
  • zhaoyawei
  • 2006年05月17日 11:12
  • 5151

Java集合类的学习(一)

(需要PDF文档可以去这里下载:http://download.csdn.net/detail/my_session/4555903) 1         集合框架 1.1         集合框...
  • my_session
  • my_session
  • 2012年09月07日 23:10
  • 438

Qt监测系统文件变化QFileSystemWatcher

QFileSystemWatcher文件系统监视器 #include #include private: Ui::Widget *ui; QPoi...
  • yh_1988
  • yh_1988
  • 2016年05月25日 14:48
  • 1982

javascript中的json对象应用

JSON var user = { "usercode" : 110, "username" : "jackson", "age" : 20 };...
  • wht18720080085
  • wht18720080085
  • 2017年04月21日 15:52
  • 337

java并发-协作对象之间死锁测试

在协作对象之间可能存在多个锁获取的情况,但是这些获取多个锁的操作并不像在LeftRightDeadLock或transferMoney中那么明显,这两个锁并不一定必须在同一个方法中被获取。如果在持有锁...
  • wojiushiwo945you
  • wojiushiwo945you
  • 2015年04月17日 15:11
  • 967

对象的创建(字面量形式)

对象 //创建对象 // var stu = new Object();//创建一个空对象 // //属性--特征 名词 // stu.name = "小麦"; // s...
  • zhongshijun521
  • zhongshijun521
  • 2016年10月09日 20:54
  • 582

word/Excel 此对象创建于package中,此应用程序不能用来打开此对象

摘自http://tieba.baidu.com/f?kz=673074802在word/Excel文档中要打开一个包         1."点击" 出现 "即将激活一个嵌入对象,可能带有病毒,是否继...
  • andrew_85
  • andrew_85
  • 2011年06月15日 05:53
  • 7454

文件系统中的对象总结及对目录项对象的重点理解

文件系统中主要对象:●超级块(superblock)对象: 存放系统中已安装文件系统的有关信息。对于基于磁盘的文件系统(具有I/O操作),这类对象通常对应于存放在磁盘上的文件系统控制块(FCB),也就...
  • abo8888882006
  • abo8888882006
  • 2010年03月09日 22:05
  • 2528

linux驱动开发-VFS虚拟文件系统

在讲字符设备驱动钱,我觉得大家应该对VFS(虚拟文件系统)
  • mj5742356
  • mj5742356
  • 2014年06月17日 16:00
  • 877

在使用Sql server 2005 生成脚本时,出现目标服务器版本不支持该对象或不支持该对象的一个属性。 (Microsoft.SqlServer.Smo)的解决办法

本人在使用sql server 2005生成数据库创建脚本时(创建索引脚本要选中),出现“目标服务器版本不支持该对象或不支持该对象的一个属性。 (Microsoft.SqlServer.Smo)”,经...
  • Beta4
  • Beta4
  • 2009年04月24日 12:46
  • 2140
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:(转)FindFirstChangeNotification,创建一个文件通知对象,该对象用于监视文件系统发生的变化
举报原因:
原因补充:

(最多只允许输入30个字)