すべてのプロセスのすべてのファイルハンドルの一覧が表示されているので、どのハンドルが実際にファイルをロックしているかをどのように確認できますか?ファイルがプロセスファイルハンドルによってロックされているかどうかを確認します
私が理解しているところでは、単にファイルを開いてすべてのアクセス許可を取得しようとすると、何か問題が生じた場合はロックされていることがわかります。しかし、それは非常に非効率的です。私は既にハンドルがあることを意味ハンドルがどのアクセス許可を確認する方法はありますか?
好ましくは、Windows XP以上で動作するソリューションをご覧ください。
私はすでにGetFileInformationByHandleEx機能で検索しましたが、アクセス許可については何も見つかりませんでした。 :/
編集: ファイルのロックに関するリアルタイム情報は必要ありません。私が作業しようとしているファイルは、特定のアプリケーションが閉じられるか、全くロックされなくなるまでロックされます。
許可よりも許してもらうほうがいい –
読み取り/書き込みはハンドルの所有者だけであるので、ハンドルに書き込むことによってファイルの「ロック」を読むことができます。 – Joel
これを行う方法はありません。どのような種類のIsFileLocked()関数も、マルチタスクオペレーティングシステムでは決して確実に動作しません。返される値は即座に失効し、ファイルにアクセスしようとするとまだロックされていないという保証はありません。あなたはアトミックなファイルにアクセスすることで見つけます。それは非効率的ではなく、ロックされているときだけあなたがすることがあります。仮説的なIsFileLocked()関数がTRUEを返した場合とまったく同じことです。ファイルを開くときに別のプロセスがファイルをロックしないようにして、これを避けてください。 –