diff --git a/src/watchdog/observers/read_directory_changes.py b/src/watchdog/observers/read_directory_changes.py index 91738be8..dba8c769 100644 --- a/src/watchdog/observers/read_directory_changes.py +++ b/src/watchdog/observers/read_directory_changes.py @@ -44,11 +44,13 @@ def __init__( super().__init__(event_queue, watch, timeout=timeout, event_filter=event_filter) self._lock = threading.Lock() self._whandle: HANDLE | None = None + self._watched_files = {} def on_thread_start(self) -> None: watch_path = self.watch.path if os.path.isfile(watch_path): - watch_path = os.path.dirname(watch_path) + watch_path, basename = os.path.split(watch_path) + self._watched_files[self.watch.path] = basename self._whandle = get_directory_handle(watch_path) if platform.python_implementation() == "PyPy": @@ -74,11 +76,12 @@ def queue_events(self, timeout: float) -> None: with self._lock: last_renamed_src_path = "" for winapi_event in winapi_events: - if os.path.isfile(self.watch.path): - if os.path.basename(self.watch.path) != winapi_event.src_path: + try: + basename = self._watched_files[self.watch.path] # Is a file? + if basename != winapi_event.src_path: continue src_path = self.watch.path - else: + except KeyError: src_path = os.path.join(self.watch.path, winapi_event.src_path) if winapi_event.is_renamed_old: