我希望能够锁定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))
您是否知道如何改进此代码并能够锁定目录访问?
贝特朗
答案 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
我不确定我的解决方案实际上是做到这一点的好方法。