如何检查文件是否被读写锁定

3

文件是否以Unicode编码,或者文件名本身就是一个Unicode字符串? - en_Knight
你是否收到了错误提示? - gplayer
类型(文件名)。无论文件的编码是什么都不重要。 - Jessie K
看一下 _sopen 调用了哪个 *A()("ANSI")win32 API 函数,然后调用相应的 *W(宽字符)函数来处理 Unicode 字符串。 - jfs
1个回答

1
问题解决了!只需要添加两行代码:
from ctypes import cdll

_sopen = cdll.msvcrt._sopen
_wsopen = cdll.msvcrt._wsopen
_close = cdll.msvcrt._close
_SH_DENYRW = 0x10

def is_open(filename):
    func = _wsopen if type(filename) is unicode else _sopen
    h = func(filename, 0, _SH_DENYRW, 0)
    try:
     return h == -1
    finally:
        _close(h)

没有理由拒绝Unicode子类:使用isinstance(filename,unicode)而不是type(filename)is unicode(另外,我不确定是否保证只有一个unicode类实例,即您可能需要在这里使用==而不是is)。 - jfs

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接