2013-03-21 6 views
7

ディスク内のファイル間の関係を追跡するアプリケーションを作成したいだけです。ソースファイル名などのファイルコピー/ムーブイベントの詳細をキャッチする方法

FileSystemWatcherは、ファイルの作成、名前変更、または削除時にEvetnsを起動できます。

しかし、FileSystemWatcherはソースファイルのパスを教えてくれません。

は、たとえば、のは、folder1内のファイルF1があると言わせ、その後、我々はfolder2という名前の別のフォルダにF1をコピーし、新しいファイル名はまだF1です。この場合、FileSystemWatcherは、folder2に新しいファイルが作成されたことを教えてくれます。しかし、F1F1からfolder1にコピーされているとは言えませんが、この情報は必要なものです。

どのような考えですか?

+1

興味深い質問です。 – David

+3

おそらく、ソースフォルダとターゲットフォルダの両方を監視し、ソースから消えているファイルとターゲットに表示されているファイルを一致させる必要があります。 –

+0

@Brankoが提案したものに似ています。私は時間T0でFolder1とFolder2のフォルダツリーのデータ構造を作成し、いくつかのファイルMovementを行い、次に新しいFolderTree構造T1を作成する場合。今、私はフォルダ1のツリー{T0、T1}とフォルダ2 {T0、T2}を比較し、違いを照合します。 – dekdev

答えて

2

としてはそのような操作はありませんので、これがある限り、ファイルシステムに関しては、「ファイルをコピー」。

ファイルコピーコマンドを実行すると、実際に古いファイルが開き、新しいファイルが作成され、内容がメモリに読み込まれ、新しいファイルに書き込まれた後、両方が閉じられます。すべてのファイルシステムは書き込みです。データが実際に別のファイルから変更されていないことを判断するための汚染追跡システムはありません。

最後に、ファイルコピーとファイルへの書き込みを区別する最後のステップは、送信先と一致するように送信先のメタデータを変更することです。しかし、やはりファイルシステムはなぜ属性を変更しているのか、それとも2つのファイルにマッチしているのか分かりません。

ファイルシステムには、リンクとリンク解除の特別な意識があります。したがって、「コンテンツへの第2のリンクの作成;第1のリンクの削除」からなる移動が検出可能である。コピーが "コピーオンライト用にマークされた新しいリンクを作成"として実装されていれば、それを発見することができますが、コピーオンライトは非常に一般的なファイルシステム機能ではありません。

0

問題は次のとおりです。「f1」というフォルダに対してコピーイベントが発生することはありません。

フォルダ1のファイル監視をトリガするのは、ファイルの更新、他のディレクトリから "f1"へのファイルのコピー、またはファイルの削除です。

"f1"で2つのファイルを使用しようとすると、ファイルを "f2"にコピーすると、2番目のファイルを更新することができ、更新イベントハンドラをトリガすることができます。 。このことができます

希望....