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))

您知道如何改进此代码并能够锁定目录访问吗?

伯特兰

4

3 回答 3

1

我不相信在 Windows 中的目录上使用flock() 是可能的。 flock() 上的PHP 文档表明它甚至不适用于 FAT32 文件系统。

另一方面,如果任何文件仍然打开,Windows 已经倾向于不允许您删除文件/目录。这一点,再加上智能地使用 ACL,可能会为您提供 95% 的等效解决方案。

于 2008-12-27T17:53:45.577 回答
0

您可能可以做这样的事情来间接锁定具有后一个群功能的目录。

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

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

于 2008-12-26T23:33:21.850 回答
0

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

open(dirname)

引发异常:

OSError: [Errno 13] Permission denied: dirname

我不太确定我的解决方案实际上是实现它的好方法。

于 2008-12-27T08:41:06.707 回答