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()
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))