Thu May 17 16:28:49 2012: Request 77261 was acted upon. Transaction: Correspondence added by CJM Queue: Win32-IPC Subject: Win32::ChangeNotify always watches subtree Broken in: (no value) Severity: Unimportant Owner: Nobody Requestors: david.zh...@bowker.com Status: new Ticket <URL: https://rt.cpan.org/Ticket/Display.html?id=77261 >
This turns out to be a problem with the underlying FindFirstChangeNotification API. There's nothing I can do about it. Here's the program I used to test it: use 5.010; use strict; use warnings; use Win32::ChangeNotify; my $notify = Win32::ChangeNotify->new(".", 0, # no subtree 'FILE_NAME DIR_NAME LAST_WRITE'); say 'waiting...'; while ($notify->wait) { say "change!"; $notify->reset; } I ran that script, and then in another console created & removed files in the watched directory and subdirectories of it. I sometimes got a notification when changing files in a subdirectory (although not all the time). I verified that it's a Windows bug by running the equivalent C program, which gave similar results: #define WIN32_LEAN_AND_MEAN #include <windows.h> #include <stdio.h> int main(int argc, char* argv[]) { HANDLE cn = FindFirstChangeNotification(".", FALSE, FILE_NOTIFY_CHANGE_FILE_NAME | FILE_NOTIFY_CHANGE_DIR_NAME | FILE_NOTIFY_CHANGE_LAST_WRITE ); puts("waiting"); while (WaitForSingleObject(cn, INFINITE) == WAIT_OBJECT_0) { puts("change!"); FindNextChangeNotification(cn); } return 0; } /* end main */