在windows上使用python shutil在Dokan Fuse中复制文件时出现问题

2024-06-28 20:03:02 发布

您现在位置:Python中文网/ 问答频道 /正文

目前,我正在使用Dokan在Windows上包装我的文件系统

从Python3.7开始,os.path实现了一个samefile函数,implement如下:

# Are two stat buffers (obtained from stat, fstat or lstat)
# describing the same file?
def samestat(s1, s2):
    """Test whether two stat buffers reference the same file"""
    return (s1.st_ino == s2.st_ino and
            s1.st_dev == s2.st_dev)


# Are two filenames really pointing to the same file?
def samefile(f1, f2):
    """Test whether two pathnames reference the same actual file"""
    s1 = os.stat(f1)
    s2 = os.stat(f2)
    return samestat(s1, s2)

您可以查看代码详细信息here

在这种情况下,我们需要确保这两个文件没有相同的st_ino和相同的st_dev,以便从一个复制到另一个

在python的doc中,属性st_ino是Windows上的文件索引(如果非零)

所有这些在普通文件系统上都可以正常工作,但在Dokan上就不行了

当我使用Dokan包装我的文件系统(在linux上使用FUSE)时,使用ino配置对于Dokan来说是不可能的,但是我没有找到任何替代品

>> os.stat("D:\\test\\data\\test\\test.xml")
os.stat_result(st_mode=33206, st_ino=0, st_dev=0, st_nlink=0, st_uid=0, st_gid=0, st_size=457, st_atime=1555481019, st_mtime=1555481019, st_ctime=1)

两者都是0

是python错误还是Dokan实现出了问题


Tags: thedevtestoswindowsstatfilesame