Erkennen von verschobenen Dateien mit FileSystemWatcher

Mir ist klar, dass FileSystemWatcher kein Move-Ereignis bereitstellt, sondern ein separates Delete- und Create-Ereignis für dieselbe Datei generiert. (Der FilesystemWatcher überwacht sowohl den Quell- als auch den Zielordner.)

Wie unterscheiden wir jedoch zwischen einer echten Dateiverschiebung und einer zufälligen Erstellung einer Datei, die zufällig denselben Namen wie eine kürzlich gelöschte Datei hat?

Eine Art von Eigenschaft der FileSystemEventArgs-Klasse, z. B. "AssociatedDeleteFile", der der Pfad der gelöschten Datei zugewiesen wird, wenn er das Ergebnis einer Verschiebung ist, oder sonst NULL, wäre großartig. Aber das gibt es natürlich nicht.

Ich verstehe auch, dass der FileSystemWatcher auf der Basis-Dateisystemebene ausgeführt wird und das Konzept eines "Verschiebens" daher möglicherweise nur für Anwendungen auf höherer Ebene von Bedeutung ist. Aber wenn dies der Fall ist, welche Art von Algorithmus würden die Leute empfehlen, um mit dieser Situation in meiner Anwendung umzugehen?

Update basierend auf Feedback:

Die FileSystemWatcher-Klasse scheint das Verschieben einer Datei als zwei unterschiedliche Ereignisse zu betrachten: Löschen der ursprünglichen Datei und anschließendes Erstellen am neuen Speicherort.

Leider gibt es keine "Verknüpfung" zwischen diesen Ereignissen, sodass nicht klar ist, wie zwischen einer Dateiverschiebung und einem normalen Löschen oder Erstellen unterschieden werden kann. Auf Betriebssystemebene wird eine Verschiebung speziell behandelt. Sie können beispielsweise eine 1-GB-Datei fast augenblicklich verschieben.

Ein paar Antworten schlugen vor, einen Hash für Dateien zu verwenden, um sie zuverlässig zwischen Ereignissen zu identifizieren, und ich werde diesen Ansatz proaktiv verfolgen. Aber wenn jemand weiß, wie man eine Bewegung einfacher erkennt, hinterlassen Sie bitte eine Antwort.

Antworten auf die Frage(5)

Ihre Antwort auf die Frage