Python: 在Windows下锁定目录访问

5
我希望你能够在Windows下锁定目录访问权限。以下的代码可以很好地处理POSIX系统下的文件或目录:
def flock(fd, blocking=False, exclusive=False):

    if exclusive:
        flags = fcntl.LOCK_EX
    else:
        flags = fcntl.LOCK_SH
    if not blocking:
        flags |= fcntl.LOCK_NB
    fcntl.flock(fd, flags)

但我只发现一种使用以下代码对文件而不是目录执行锁定访问的方式:
def flock(fd, blocking=False, exclusive=False):

    if blocking:
        flags = msvcrt.LK_NBLCK
    else:
        flags = msvcrt.LK_LOCK
    msvcrt.locking(fd.fileno(), flags, os.path.getsize(fd.name))

你有什么想法可以改进这段代码并锁定目录访问吗?
Bertrand
3个回答

1

我不相信在Windows上可以使用flock()锁定目录。PHP文档中关于flock()的说明表明,它甚至不能在FAT32文件系统上工作。

另一方面,Windows通常不允许您删除仍有打开文件/目录的情况下的文件/目录。这个特性再加上智能地使用ACLs,可能会得到一个95%等效的解决方案。


0

你可以尝试使用 flock 函数来间接锁定一个目录。

for file in os.listdir(dir):
 f = open(file)
 flock(f)

这是一个受限版本,因为用户将能够在目录中创建新文件。


0

没错,你说得对,至少我可以尝试锁定目录中的每个文件,但这可能会很痛苦,因为我需要进入我的目录的所有子目录。在 POSIX 系统中,这很容易实现,因为目录被视为文件,所以没有什么问题。但在 Windows 中,当我尝试打开一个目录时,它并不真正喜欢那样做。

open(dirname)

引发异常:

OSError: [Errno 13] Permission denied: dirname

我不确定我的解决方案是否是正确的方法。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接