Wykrywanie przeniesionych plików przy użyciu FileSystemWatcher

Zdaję sobie sprawę, że FileSystemWatcher nie udostępnia zdarzenia Move, zamiast tego wygeneruje osobne zdarzenia Delete i Create dla tego samego pliku. (Kontroler plików systemu ogląda zarówno folder źródłowy, jak i docelowy).

Jak jednak odróżnić prawdziwy ruch pliku od przypadkowego utworzenia pliku, który ma taką samą nazwę jak ostatnio usunięty plik?

Pewna właściwość klasy FileSystemEventArgs, taka jak „AssociatedDeleteFile”, której przypisano ścieżkę usuniętego pliku, jeśli jest wynikiem ruchu, lub NULL w przeciwnym razie, byłaby świetna. Ale oczywiście to nie istnieje.

Rozumiem również, że FileSystemWatcher działa na podstawowym poziomie systemu plików, więc koncepcja „ruchu” może mieć znaczenie tylko dla aplikacji wyższego poziomu. Ale jeśli tak jest, jaki rodzaj algorytmu poleciliby ludzie, aby poradzić sobie z tą sytuacją w mojej aplikacji?

Aktualizacja na podstawie opinii:

Wydaje się, że klasa FileSystemWatcher przenosi plik jako po prostu dwa różne zdarzenia, Usuń oryginalny plik, a następnie Utwórz w nowej lokalizacji.

Niestety między tymi zdarzeniami nie ma „łącza”, więc nie jest oczywiste, jak odróżnić ruch pliku od normalnego Usuń lub Utwórz. Na poziomie systemu operacyjnego ruch jest traktowany specjalnie, możesz przenieść plik 1 GB prawie natychmiast.

Kilka odpowiedzi sugerowało użycie skrótu na plikach, aby zidentyfikować je niezawodnie między zdarzeniami, i podejmiemy takie podejście. Ale jeśli ktoś wie, jak łatwiej wykryć ruch, proszę zostawić odpowiedź.

questionAnswers(5)

yourAnswerToTheQuestion