当前,我正在使用Dokan在Windows上包装文件系统。
从Python 3.7开始,os.path
实现了一个samefile
函数,其实现如下:
# 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
,以便从一个文件复制到另一个文件。
在doc for python中,属性st_ino
是Windows上的文件索引(如果非零)。
以上所有操作在普通文件系统上都可以,但在Dokan上效果不佳。
当我使用Dokan封装文件系统时(在Linux上使用FUSE),use_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)
st_ino都始终为0。
是Python错误还是我的Dokan实现有问题?