ユーザーが開いている間にドキュメントをロックするソフトウェアの新しい機能を実装しようとしています(これまでは、その期間はハンドルを開いたままにしなかった)。ファイルのすべてのロックホルダーのウィンドウを照会する方法
ハンドルを保持し、書き込み専用モードで開くのは簡単です。
私の質問は、特定のファイルを書き込みアクセスで開くことができない場合、どのユーザー/エンティティがすでに書き込みアクセス用にファイルをロックしているかを検出するためにウィンドウを照会する方法です。
例:
_fsopen(m_ClipboardFilename, "wb", _SH_DENYWR);
それとも
CStdioFile listFile(strLabelfile, CFile::typeText | CFile::modeRead | CFile::shareDenyWrite | CFile::modeNoInherit);
これらのいずれかが排他的な書き込みアクセス権を持つ任意のファイルを開く(または共有違反や他のいくつかの問題があったかどうかを示すエラーで失敗します) 。それが共有違反の場合はファイルをロックしているので、私はPC-007の
サムは、持っている現在のユーザーに報告することができます「」
しかし、私がやりたいことを発見することですこのファイルはロックされており、読み取り専用モードの場合は にしか開くことができません。続行しますか?ファイル(SYS-管理型utilsの)操作することができるように、より多くのロックを強制的にそれがロックを解除すると -
は、ロックされたファイルを持っている人を教えてくれます私が見たのユーティリティがあります。したがって、この情報を照会する方法が必要であるようです。
残念ながら、それはひどく控えめな解決策です。 MSは実際に誰もが特定のアプリケーションが開こうとする1つのDLLまたはファイルごとにIFileInUseを実装しようとしていると考えていますか? Yikes! 私は、WordやExcelのように何かハッキリしなければならないと思います。私たちのソフトウェアがそれを開いたときに、どのPC上のどのユーザがファイルをロックしているかを示す一時ファイルを書き出します。 – Mordachai