FindFirstChangeNotification API

时间:2010-04-16 09:11:25

标签: file winapi

我正在使用FindFirstChangeNotification API来监控特定文件夹中发生的更改。但是如何排除特定文件(存在于观看文件夹中)仅更改通知。

2 个答案:

答案 0 :(得分:1)

它在目录级别工作,如果要排除特定文件,则只需忽略应用程序逻辑中有关它的任何通知。

答案 1 :(得分:1)

使用ReadDirectoryChanges(),它监视目录树中的文件。 ReadDirectoryChanges基本上与FindFirstChangeNotificationFindNextChangeNotification做同样的事情。 ReadDirectoryChanges功能更强大,因为如果向ReadDirectoryChangesW()提供可选的回调函数,您可以看到哪个文件发生了变化,变更了原因,然后在应用程序逻辑中进行过滤,而不会产生任何系统调用的开销( s)找到哪个文件发生了变化,......你得到了这个结构数组。

typedef struct _FILE_NOTIFY_INFORMATION {

  DWORD NextEntryOffset;

  DWORD Action;                    // <- reason for the change

  DWORD FileNameLength;

  WCHAR FileName[1];

} FILE_NOTIFY_INFORMATION, *PFILE_NOTIFY_INFORMATION;

FindNextChangeNotification更像是一个大锤,您仍然需要检查文件夹以查看确切的更改,但如果您已经知道要搜索哪个文件,则更容易使用。在线程等待/ IO完成逻辑方面,Findfirst / Next也稍微容易使用。