トップ回答者
ファイルのコピー(移動)元と先のディレクトリ名、および対象ファイル名を知りたい

質問
-
お世話になっております。
あるファイルを、Explorerやその他のアプリにてコピー(移動)した際に、そのコピー(移動)元のパス名とコピー(移動)先のパス名、および対象ファイル名を得たいと思っています。(コピーや移動そのものはしません。元と先の情報のみ得られればと思います)
.NETの FileSystemWatcherで監視しようとした場合は、
・対象ディレクトリがドライブ全域になり、処理が重すぎる。
・コピー(移動)先しか得られない (また新規作成されたのか、コピー・移動したのかの区別もつかない)
という欠点があると思うのですが、何か良い方法はありますでしょうか?
感覚的には Explorerのイベントを拾うようなシェル拡張的なものを作る必要があるのかな?と考えていますが、キーワードがわからずとっかかりがありません。
Win32APIが絡んでも問題ありませんので、何か情報があればご教示いただきたく思います。
宜しくお願い致します。
回答
-
SHFileOperation API(エクスプローラのファイル操作の実体)だけでよいのであれば、ICopyHook インターフェースを実装することでトラップできると思います。
ですが、それ以外のものについてはこれではトラップできません。
佐祐理さんも書いていますが、至った背景などを説明するとより現実的な回答が得られるかもしれません。
とっちゃん@わんくま同盟, Microsoft MVP for Visual C++ (Oct 2005-) http://blogs.wankuma.com/tocchann/
- 回答としてマーク Hiroki Kinoshita 2014年7月25日 8:11
-
使ったことはありませんが、検索するとReadDirectoryChangesWなんていうのが出てきますね。監視中は安全な取り外しができなくなるなど注意点があるようですが・・・
★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/
- 回答としてマーク Hiroki Kinoshita 2014年7月25日 8:11
-
監視・操作履歴の保存ということでしたら、普通にOSの機能としてイベントログを使われてはどうでしょうか?
監査ログにファイル操作もあります。ただし他にも大量に出力されるとは思いますが…完全性及びパフォーマンスという点においてはOS機能なのでそれなりに期待できるかと。
- 回答としてマーク Hiroki Kinoshita 2014年7月25日 8:10
すべての返信
-
SHFileOperation API(エクスプローラのファイル操作の実体)だけでよいのであれば、ICopyHook インターフェースを実装することでトラップできると思います。
ですが、それ以外のものについてはこれではトラップできません。
佐祐理さんも書いていますが、至った背景などを説明するとより現実的な回答が得られるかもしれません。
とっちゃん@わんくま同盟, Microsoft MVP for Visual C++ (Oct 2005-) http://blogs.wankuma.com/tocchann/
- 回答としてマーク Hiroki Kinoshita 2014年7月25日 8:11
-
使ったことはありませんが、検索するとReadDirectoryChangesWなんていうのが出てきますね。監視中は安全な取り外しができなくなるなど注意点があるようですが・・・
★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/
- 回答としてマーク Hiroki Kinoshita 2014年7月25日 8:11
-
監視・操作履歴の保存ということでしたら、普通にOSの機能としてイベントログを使われてはどうでしょうか?
監査ログにファイル操作もあります。ただし他にも大量に出力されるとは思いますが…完全性及びパフォーマンスという点においてはOS機能なのでそれなりに期待できるかと。
- 回答としてマーク Hiroki Kinoshita 2014年7月25日 8:10