Проблема с использованием Python Shutil для копирования файла в Dokan Fuse на Windows - PullRequest
0 голосов
/ 13 мая 2019

В настоящее время я использую 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 что-то не так?

...