2017-07-12 6 views
3

私はイメージファイルを処理するプログラムに取り組んでいます。私が取り組んでいる問題は、画像の一部が非常に大きく、コピー処理がいつ行われるのかわかりません。現在、コードはC#で記述されており、FileSystemWatcherクラスを使用してファイルを監視しています。唯一の問題は、別のプロセスがファイルを終了したときのイベントがないことです。HOWTO:Windowsの別のプロセスによるファイルアクセスの監視?

現在のロジックは、作成されたイベントと変更されたイベントを監視し、その時点でコピープロセスが完了したことを期待して5秒待つことです。これは私の開発マシンでは機能しますが、残念ながら顧客はプロセス全体の問題を報告します。

年前私がこのコードを書いたとき、私はそれがDDK SDKの一部であると思っていましたが、別のプログラムがファイルにアクセスしている様子をもっと多く知ることができます。

これについて誰もが話し、正しい方向に向けることができますか?私はC++コードではなく、C#コードであることを期待しています。以下のいくつかの質問に答えるために


問題は、他のプロセスが私のプログラムを監視しているディレクトリにコピー画像であるということです。イメージが完全にコピーされると、私のプログラムはできるだけ早くイメージの処理を開始する必要があります。問題は、多くの画像、時には何百もの画像が一度にコピーされることです。各画像はできるだけ高速で処理する必要があるため、システムはできるだけ早く画像が完全にコピーされ処理できることを知る必要があります。

私はWinSDK経由でやりたいことをする方法がないことを十分に承知していますが、99.9%はWinDDK経由で可能で、おそらく私は名前が間違っていると思います。 Driver Kit(WDK)」を参照してください。私は、SysInternalsがWDKのレベル機能を使用することで、すべてのクールなトリックを取り除く方法を確信しています。

+0

私はdll注入を使用し、 'fclose()'の呼び出しを監視できると思います。しかし、それがあなた自身のプロセスであれば、ファイル補完イベントを標準出力に出力できない原因は何ですか? – Frank

+0

私はwin32 APIでこれを行う方法がないことを知っています。 Sysinternalsには、ハンドルが開いている人を詮索できるようにするいくつかのきれいなツールがあります。そのため、ファイルハンドルがまだ開いているかどうかを調べることができます。事は、win32の下にほとんど文書化されていないスペースに潜入しなければならないと思います。しかし、ファイルが排他アクセスで開かれている場合は、ファイルをポーリングして定期的に開こうとすることができます。他のプロセスにまだファイルがロックされていると、ファイルは開かれません。 – user4581301

答えて

-1

興味深いのは、sys internals procmonツールです。他の機能の中でも、ファイルアクセスを監視して、詳細を多く提供します。 残念ながら、ソースは利用できませんが、あなたのような問題を抱えている誰かによって開始されたa thread about previous version(filemon)です。

また、open source alternativeを調べることもできますが、探しているコードがある場合があります。

また、use ProcMon as a monitor toolと出力を解析することもできます。組み込みフィルタ機能を使用すると、ログファイルのエントリを特定のフォルダおよびファイルアクセスイベントのタイプ/データに限定することができます。

関連する問題