WatchService / Löschungen / Datei oder Verzeichnis?

8

Ich möchte feststellen, ob eine Datei oder ein Verzeichnis gelöscht wurde. Offensichtlich kann ich Files.isDirectory (Path) und das Äquivalent für Dateien nicht verwenden, da die Datei / das Verzeichnis bereits gelöscht wurde.

Ich habe darüber nachgedacht, zwei WatchService-Instanzen zu verwenden, um entweder auf Dateiänderungen oder Verzeichnisänderungen zu achten, dann weiß ich ständig, ob es sich um eine Datei oder ein Verzeichnis handelt. Leider kann ich keine geeignete Methode finden.

Edit: Ich denke, jede andere Lösung bezüglich der Überprüfung einer String-Repräsentation von Dateinamen gegenüber Verzeichnissen ist fehleranfällig.

    
Johannes 20.11.2011, 14:36
quelle

1 Antwort

2

Behalten Sie eine lokale Kopie der Metadaten in dem Verzeichnis, das Sie gerade sehen - von nur einer Liste von Einträgen mit der Angabe, ob es sich jeweils um eine Datei oder ein Verzeichnis handelt, zusammen mit allen anderen Attributen, an denen Sie nach dem Löschen möglicherweise interessiert sind. Größe oder zuletzt geänderte Zeit. Sie können diese Metadaten nach Erhalt einer Löschbenachrichtigung einsehen.

Sie können diesen Metadatenspeicher füllen, wenn Sie Ihre Überwachungsschleife starten - und Ihren Beobachter mit ENTRY_CREATE und ENTRY_MODIFY erweitern, um Ihren Metadatenspeicher auf dem neuesten Stand zu halten, während andere Änderungen vorgenommen werden, während das Verzeichnis überwacht wird.

Zugegeben, das wird nicht ohne zusätzlichen Aufwand im Speicher sein, um an diesen Daten festzuhalten, aber für die meisten Anwendungsfälle sollte es eher unbedeutend sein.

    
ziesemer 20.11.2011, 14:59
quelle

Tags und Links