У меня есть список всех дескрипторов файлов всех процессов, как я могу узнать, какие из этих дескрипторов фактически блокируют файл?Проверьте, заблокирован ли файл файловой системой процесса
Из чего я понимаю, я мог бы просто попытаться открыть файлы и попытаться получить все разрешения, и если что-то пойдет не так, я бы знал, что он заблокирован. Но это звучит крайне неэффективно. Я имею в виду, что у меня уже есть ручки, нет ли способа проверить, какие разрешения имеют ручки?
Желательно, чтобы я увидел решение, которое работает в Windows XP и выше.
Я уже искал функцию GetFileInformationByHandleEx, но я ничего не мог найти о разрешениях доступа. :/
Редактировать: Мне не нужна информация в реальном времени о блокировке файла. Файлы, над которыми я планирую работать, будут заблокированы до тех пор, пока определенные приложения не будут закрыты или вообще не будут заблокированы.
Лучше просить прощения, чем разрешение –
Вы можете прочитать «блокировку» файла, пытаясь записать его в дескриптор, поскольку чтение/запись осуществляется только владельцем дескриптора. – Joel
Невозможно сделать это. Любая функция IsFileLocked() не может надежно работать в многозадачной операционной системе. Возвращаемое значение моментально устарело и не гарантирует, что оно все еще разблокируется при попытке доступа к файлу. Вы узнаете, обратившись к файлу, который является атомарным. Это не является неэффективным, только то, что вы делаете, когда оно заблокировано, может быть. Это то же самое, что и вы, если гипотетическая функция IsFileLocked() вернула TRUE. Избегайте всего этого, препятствуя тому, чтобы другой процесс блокировал файл при его открытии. –