Как запросить окна для всех держателей блокировки в файле - PullRequest
0 голосов
/ 06 марта 2012

Я собираюсь реализовать для нашего программного обеспечения новую функцию блокировки наших документов, пока пользователь их открывает (ранее мы просто открывали файл для чтения или для записи, но не держали ручку открытой в течение продолжительного времени).

Тривиально хранить дескриптор и открывать его в режиме исключительной записи.

Мой вопрос заключается в том, как запросить окна, чтобы определить, нельзя ли открыть данный файл с доступом для записи,какой пользователь / объект уже заблокировал файл для доступа на запись?

например:

_fsopen(m_ClipboardFilename, "wb", _SH_DENYWR);

Или

CStdioFile listFile(strLabelfile, CFile::typeText | CFile::modeRead | CFile::shareDenyWrite | CFile::modeNoInherit);

Любой из этих способов открывает данный файл с эксклюзивной записьюдоступ (или не удается с ошибкой, указывающей, имело ли место нарушение общего доступа или какая-либо другая проблема).

Но я хочу выяснить, у кого файл заблокирован, если это нарушение общего доступа, поэтомуЯ могу сообщить текущему пользователю, что

Сэм на ПК-007 заблокировал этот файл, открыть его можно только в режиме только для чтения.Вы хотите продолжить?

Есть утилиты, которые я видел, которые скажут вам, у кого файл заблокирован - и еще, которые заставят блокировки быть разблокированными, чтобы можно было манипулировать файлом (sys-admin type utils).Так что, похоже, должен быть способ запросить эту информацию.

1 Ответ

1 голос
/ 06 марта 2012

Раймонд Чен недавно объяснил, как это сделать с помощью Менеджер перезапуска .

Это скажет вам, у какого процесса открыт файл, но я не знаюзнать, скажет ли он вам что-нибудь очень полезное, если файл является другим сервером.

...