Python:在Windows下锁定目录访问

时间:2008-12-26 23:16:23

标签: python windows directory locking

我希望能够锁定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))

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

贝特朗

3 个答案:

答案 0 :(得分:1)

我不相信可以在windows中的目录上使用flock()。 flock()上的PHPs docs表示它甚至不能在FAT32文件系统上运行。

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

答案 1 :(得分:0)

你可能会做这样的事情,用后一个flock函数间接锁定一个目录。

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

这是限制版本,因为用户可以在目录中创建新文件。

答案 2 :(得分:0)

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

open(dirname)

引发异常:

OSError: [Errno 13] Permission denied: dirname

我不确定我的解决方案实际上是做到这一点的好方法。