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

  • 質問

  • お世話になっております。

    あるファイルを、Explorerやその他のアプリにてコピー(移動)した際に、そのコピー(移動)元のパス名とコピー(移動)先のパス名、および対象ファイル名を得たいと思っています。(コピーや移動そのものはしません。元と先の情報のみ得られればと思います)

    .NETの FileSystemWatcherで監視しようとした場合は、

    ・対象ディレクトリがドライブ全域になり、処理が重すぎる。

    ・コピー(移動)先しか得られない (また新規作成されたのか、コピー・移動したのかの区別もつかない)

    という欠点があると思うのですが、何か良い方法はありますでしょうか?

    感覚的には Explorerのイベントを拾うようなシェル拡張的なものを作る必要があるのかな?と考えていますが、キーワードがわからずとっかかりがありません。

    Win32APIが絡んでも問題ありませんので、何か情報があればご教示いただきたく思います。

    宜しくお願い致します。

    2014年7月25日 5:09

回答

  • SHFileOperation API(エクスプローラのファイル操作の実体)だけでよいのであれば、ICopyHook インターフェースを実装することでトラップできると思います。

    ですが、それ以外のものについてはこれではトラップできません。

    佐祐理さんも書いていますが、至った背景などを説明するとより現実的な回答が得られるかもしれません。


    とっちゃん@わんくま同盟, Microsoft MVP for Visual C++ (Oct 2005-) http://blogs.wankuma.com/tocchann/

    2014年7月25日 6:01
  • 使ったことはありませんが、検索するとReadDirectoryChangesWなんていうのが出てきますね。監視中は安全な取り外しができなくなるなど注意点があるようですが・・・

    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/

    2014年7月25日 6:18
    モデレータ
  • 監視・操作履歴の保存ということでしたら、普通にOSの機能としてイベントログを使われてはどうでしょうか?

    監査ログにファイル操作もあります。ただし他にも大量に出力されるとは思いますが…完全性及びパフォーマンスという点においてはOS機能なのでそれなりに期待できるかと。

    2014年7月25日 7:02

すべての返信

  • この質問に至った背景をもう少し説明してもらえると、別のアプローチを提示できるかもしれません。現状、なぜコピー・移動のパスを知りたいのかわかりません。

    また対象となるプロセスはExplorer上での操作に限られるのでしょうか? それともシステム全体でしょうか?

    2014年7月25日 5:32
  • SHFileOperation API(エクスプローラのファイル操作の実体)だけでよいのであれば、ICopyHook インターフェースを実装することでトラップできると思います。

    ですが、それ以外のものについてはこれではトラップできません。

    佐祐理さんも書いていますが、至った背景などを説明するとより現実的な回答が得られるかもしれません。


    とっちゃん@わんくま同盟, Microsoft MVP for Visual C++ (Oct 2005-) http://blogs.wankuma.com/tocchann/

    2014年7月25日 6:01
  • 使ったことはありませんが、検索するとReadDirectoryChangesWなんていうのが出てきますね。監視中は安全な取り外しができなくなるなど注意点があるようですが・・・

    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/

    2014年7月25日 6:18
    モデレータ
  • とっちゃんさん、返信ありがとうございます。

    現時点ではシステム全体を取得対象としたいと考えておりますが、

    Explorerでの操作に限定するとした場合、情報取得方法として参考にさせていただきます。

    2014年7月25日 6:46
  • 佐祐理さん返信ありがとうございます。

    ユーザのファイル操作に対する監視・操作履歴の保存が目的です。

    対象プロセスはExplorerには限らず、システム全体を望んでいますが、難易度、規模によってはExplorerに限定することも考えております。

    2014年7月25日 6:47
  • trapemiyaさん、返信&情報のご提供ありがとうございます。

    このAPIは、残念ながら FileSystemWatcherの呼び出し先で、出来ること、問題点も同じ様ですね。
    監視中、安全な取り外しができなくなるなどの注意点は、他の方法の場合でも留意したいと思います。

    2014年7月25日 6:50
  • 監視・操作履歴の保存ということでしたら、普通にOSの機能としてイベントログを使われてはどうでしょうか?

    監査ログにファイル操作もあります。ただし他にも大量に出力されるとは思いますが…完全性及びパフォーマンスという点においてはOS機能なのでそれなりに期待できるかと。

    2014年7月25日 7:02
  • なるほど、監査ポリシーを設定し、イベントログから拾うという手があるのですね。

    出力量など試しつつ、どうフィルターをかけるか等、まずは試しながらこの方向で調べ進めてみたいと思います。

    皆様、大変ありがとうございました。

    2014年7月25日 8:10