2008-12-26 64 views
4

我希望能够在windows下锁定目录访问。 下POSIX系统文件或目录下面的代码工作很大:Python:在windows下锁定目录访问

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

你可能可以这样做,间接地锁定一个目录与后面的flock函数。

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

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

0

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

open(dirname) 

产生异常:

OSError: [Errno 13] Permission denied: dirname 

我真的不知道我的解决方案实际上是做的很好的方式。

1

我不认为有可能在windows中的目录中使用flock()。 flock()上的PHPs docs表明它甚至不能在FAT32文件系统上工作。

另一方面,如果任何文件仍然打开,Windows已经不允许您删除文件/目录。此外,可能会智能地使用ACL,可能会为您提供95%的同等解决方案。