2012-01-06 11 views
6

ユーザーや他のアプリケーションによってコピーされたファイルを追跡しようとしています。 FileSystemWatchには、Changed、Created、Deleted、Disposed、Error、およびRenamedのイベントしかありません。 コピー機能によってファイルにアクセスしたとき、または新しいファイルをコピーしているときにイベントを発生させません。C#コピーしたファイルを追跡する

ウィンドウのコピーイベント/機能を監視する方法はありますか?

+0

代わりにクリップボードのインスタンスで見ることはできますか?ちょっとした考え。 http://msdn.microsoft.com/en-us/library/system.windows.forms.clipboard.aspx –

+0

コピーの追跡に失敗してもどれくらいうまく対応できますか?ほとんどの場合、ほとんどのコピー(たとえばエクスプローラで実行されたもの)を追跡できますが、一部はスリップします。 –

+0

なぜこれをやろうとしていますか? – RQDQ

答えて

4

私はC#を使用する方法はわかりません。

File System Filter Driverを書いてください。ファイル システムまたは別のファイルシステムフィルタドライバを対象

ファイルシステムフィルタドライバのインターセプト要求[ファイルの破損および/またはあなたのシステムをダウンさせための余地がある間違いなく専門家の領土として]。 リクエストを目的のターゲットに到達する前に傍受することで、フィルタドライバは リクエストの元のターゲットによって提供された機能を拡張または置換できます。ファイルシステムフィルタドライバの例には、ウイルス対策フィルタ 、バックアップエージェント、および暗号化製品が含まれます。ファイル システムおよびファイルシステムフィルタドライバを開発するには、Windows Driver Kit(WDK)と共に提供されるIFS(インストール可能ファイル システム)キットを使用します。

+1

フィルタドライバは別々の読み書き操作を追跡できますが、2つの間のリンクを確立することはできません。明確な方法でコピーを識別することは不可能です。 –

1

FileSystemWatcherで正しいことをしています。 Windowsには、コピーを確実に報告するための組み込みのメカニズムはありません。

OSのコピールーチンをフックすることはできますが、これは良い結果を保証するものではありません。アプリケーションは、ソースファイルとコピー先ファイルを開き、バイトをコピーするだけで自由に独自のコピーを実装できます。

OSの名前変更が他の手段で簡単に模倣できないため、名前の変更がすべてFileSystemWatcherであるため、名前の変更は異なります。ドライブ間の移動はコピーに似ていることに注意してください。名前が変更された通知は表示されず、代わりに「作成済み」と「削除済み」通知が表示されます。

あなたが本当にコピーしたばかりのファイルに気づく必要があるのであれば、私の提案のアプローチはこれです:

  • HookCloseFile呼び出し、FileSystemWatcherに加えて。
  • ファイルがクローズするたびに、そのファイルがコピー/ドライブ間移動のソースまたはターゲットである可能性があります。サイズを確認してください。
  • 同じサイズの閉じたファイルが2つあると思われる場合は、その内容を比較してください。かなりリソースを消費しますが、これを行う唯一の信頼できる方法です。
0

あなたは、イベントログエントリを書き込み、このようなイベントは、私が何か良い方法を考えることはできません

0

を発生したときにすることができ、セットアッププログラムが起動するには、WindowsのAuditing file and folder access機能を使用することができます。

新しく作成されたファイルごとに、ファイルシステムのどこかに(おそらく異なる名前の)重複があるかどうかを確認する必要があります。あなたは明らかにこのブルートフォースを行うことができますが、解決策は非常に控えめで、遅く、脆いでしょう!

関連する問題