Невозможно разблокировать файл, который был заблокирован с помощью msvcrt - PullRequest
0 голосов
/ 16 марта 2020

Я получаю PermissionError: [Errno 13] Permission denied при попытке разблокировать файл:

with open(fp, 'rb') as f:
    fd = f.fileno()
    size = os.path.getsize(fp)
    msvcrt.locking(fd, msvcrt.LK_LOCK, size)  # lock entire file
    _ = f.read(4)
    f.seek(0) 
    msvcrt.locking(fd, msvcrt.LK_UNLCK, size)  # throws PermissionError

В соответствии с документами MSDN для _locking :

Вся блокировка или разблокировка начинается с текущей позиции указателя файла и продолжается для следующих байтов байтов. Можно заблокировать байты за концом файла.

Следовательно, f.seek(0) после f.read(4). Однако это прекрасно работает:

with open(fp, 'rb') as f:
    fd = f.fileno()
    size = os.path.getsize(fp)
    msvcrt.locking(fd, msvcrt.LK_LOCK, size)  # lock entire file
    msvcrt.locking(fd, msvcrt.LK_UNLCK, size)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...