Beispiel #1
0
        def run(self):
            dir_handle = winutil.create_file(
                self.path_to_watch,
                winutil.FILE_LIST_DIRECTORY,
                winutil.FILE_SHARE_READ,
                winutil.OPEN_EXISTING,
                winutil.FILE_FLAG_BACKUP_SEMANTICS,
            )

            try:
                buffer = b'0' * 8192
                while True:
                    try:
                        results = winutil.read_directory_changes(
                            dir_handle,
                            buffer,
                            True,  # Watch sub-directories as well
                            winutil.FILE_NOTIFY_CHANGE_FILE_NAME
                            | winutil.FILE_NOTIFY_CHANGE_DIR_NAME
                            | winutil.FILE_NOTIFY_CHANGE_ATTRIBUTES
                            | winutil.FILE_NOTIFY_CHANGE_SIZE
                            | winutil.FILE_NOTIFY_CHANGE_LAST_WRITE
                            | winutil.FILE_NOTIFY_CHANGE_SECURITY,
                        )
                        for action, filename in results:
                            if self.file_is_watched(filename):
                                self.modified_queue.put(
                                    os.path.join(self.path_to_watch, filename))
                    except OverflowError:
                        pass  # the buffer overflowed, there are unknown changes
            except Exception:
                import traceback
                traceback.print_exc()
Beispiel #2
0
 def read_changes():
     buffer = b'0' * 8192
     started.set()
     events.extend(
         winutil.read_directory_changes(
             dh, buffer, True, winutil.FILE_NOTIFY_CHANGE_FILE_NAME
             | winutil.FILE_NOTIFY_CHANGE_DIR_NAME
             | winutil.FILE_NOTIFY_CHANGE_ATTRIBUTES
             | winutil.FILE_NOTIFY_CHANGE_SIZE
             | winutil.FILE_NOTIFY_CHANGE_LAST_WRITE
             | winutil.FILE_NOTIFY_CHANGE_SECURITY))