Вы должны попытаться получить к нему доступ, и если это не удалось, у вас либо нет необходимых разрешений (которые вы можете проверить с помощью GetAccessControl), либо он заблокирован другим процессом.
Но я не думаю, что существует какая-либо надежная мера для разграничения блокировки и сбоя разрешения (поскольку вы можете прочитать файл, но не сможете проверить разрешения). Даже в сообщении об ошибке Windows говорится, что у вас либо нет разрешения, либо он используется другим процессом.
Вы можете использовать класс WMI CIM_DataFile
для запроса InUseCount
для указанного файла данных.
Если вы ищете программный эквивалент утилиты lsof
в Linux, чтобы узнать все открытые файлы по заданному локальному процессу, вы можете попробовать использовать Win32_Process
класс WMI через System.Management
пространство имен. Вы можете выполнить запрос WMI для поиска имени файла во всех открытых файлах, используемых всеми локальными процессами, а также посмотреть, есть ли оно там или нет. В качестве альтернативы вы можете использовать P / Invoke и напрямую использовать API NtQuerySystemInformation
для выполнения той же задачи.