FileSystemWatcher は Move イベントを提供しないことに気付きました。代わりに、同じファイルに対して個別の Delete イベントと Create イベントを生成します。(FilesystemWatcher は、ソース フォルダーと宛先フォルダーの両方を監視しています)。
しかし、実際のファイルの移動と、最近削除されたファイルと同じ名前のファイルがランダムに作成されたものとは、どのように区別すればよいでしょうか?
"AssociatedDeleteFile" などの FileSystemEventArgs クラスのある種のプロパティは、削除されたファイル パスが移動の結果である場合は割り当てられ、それ以外の場合は NULL が割り当てられます。しかし、もちろんこれは存在しません。
また、FileSystemWatcher は基本的なファイルシステム レベルで動作しているため、「移動」の概念はより高いレベルのアプリケーションにとってのみ意味があることも理解しています。しかし、これが事実である場合、私のアプリケーションでこの状況を処理するために、どのような種類のアルゴリズムが推奨されるでしょうか?
フィードバックに基づく更新:
FileSystemWatcher クラスは、ファイルの移動を、元のファイルの削除とそれに続く新しい場所での作成という 2 つの異なるイベントとして認識しているようです。
残念ながら、これらのイベント間に「リンク」が提供されていないため、ファイルの移動と通常の削除または作成を区別する方法が明確ではありません。OS レベルでは、移動は特別に扱われ、たとえば 1GB のファイルをほぼ瞬時に移動できます。
イベント間でファイルを確実に識別するためにファイルのハッシュを使用することを提案したいくつかの回答があり、私はおそらくこのアプローチを採用します。しかし、より簡単に動きを検出する方法を誰かが知っている場合は、答えを残してください.