2008-12-26 59 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%的同等解決方案。