ファイルが任意のプロセス (呼び出し元を含む) によって開かれているかどうかを知りたい 既にいくつかの提案が投稿されていますが、それらはファイルを排他的に開こうとして例外をキャッチすることを中心に展開する傾向があります。
私の場合、これは絶対確実な方法であるとは証明されていません。特定の状況では、実行中のすべてのプロセスのファイル タイプの開いているすべてのハンドルの名前をスキャンすることで解決できると信じています。
.NET と P/Invoke だけでこの問題を解決できるとは思いません。低レベルの機能にアクセスする必要があります。ドライバー開発キット (DDK) を使用している別のフォーラムのこのスレッドで AdaraCD によって投稿されたソリューションを参照してください。
貧しい人の方法は、sysinternals から handle.exe にシェルすることです。配布できるかわかりません。管理者として実行する必要があります(とにかくやりたいことを行うには管理者権限が必要だと確信しています)。とにかく、それにシェルを付けて出力をファイルにリダイレクトするか、そのstdoutをキャプチャできる場合は、その出力を解析して必要なものを取得するだけです。インターネットのウェイバックで検索しましたが、マーク r はないようです。ソースを彼のユーティリティにリリースしたことがあります。
配布するアプリがある場合、これは明らかに良い解決策ではありませんが、社内でのみ使用する場合は、おそらくこれで十分です.
よろしく、ドン
私が覚えているように、コード handle.exe にはオープン ソースがあるので、この優れたユーティリティを参照として使用できます。