В настоящее время я использую 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)
Вы можете просмотреть детали кода здесь
В этом случае нам нужно убедиться, что два файла не совпадают st_ino
и не совпадают st_dev
, чтобы их можно было скопировать изодин к другому.
В doc для python атрибут st_ino
- это индекс файла в Windows, если он не равен нулю.
Всевыше работает нормально на нормальной файловой системе, но не хорошо на Dokan.
Когда я использую Dokan, чтобы обернуть мою файловую систему (используя FUSE на linux), конфигурация 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 что-то не так?