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

後者のflock関数を使用して、ディレクトリを間接的にロックするために、おそらくこのようなことを行うことができます。

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 に答える