Comme vous l'avez déjà constaté, os.path.samefile
utilise os.stat
. stat suit les liens symboliques :
Cette fonction suit normalement les liens symboliques ; pour statuer sur un lien symbolique, ajoutez l'argument follow_symlinks=False, ou utilisez lstat().
Cette fonction peut prendre en charge la spécification d'un descripteur de fichier et ne pas suivre les liens symboliques.
Revenons à votre question :
Si a
est le chemin vers un lien symbolique qui pointe vers b
, sera os.path.samefile("a", "b")
retourner True
o False
?
Cela devrait donner True
puisque stat suit les liens symboliques par défaut.
Si vous avez besoin d'une fonction qui renvoie False
dans ce cas, vous pouvez simplement créer le vôtre en utilisant le code que vous avez déjà trouvé, et l'option follow_symlinks=False
avec stat.
Est-ce que cela est garanti pour tous les systèmes d'exploitation et les systèmes de fichiers ?
C'est une question difficile. Même si de nombreux langages de haut niveau tentent de cacher à l'utilisateur les détails du système sous-jacent, certaines opérations sont presque toujours dépendantes du système. L'entrée/sortie de fichiers entre souvent dans cette catégorie. En fait, l'entrée/sortie de fichiers dépend également du système de fichiers - si vous avez deux systèmes de fichiers différents montés sur le même hôte, le même code peut se comporter différemment sur les deux systèmes de fichiers.
Dans la pratique, la plupart des systèmes de fichiers se comportent de manière similaire dans la plupart des cas - vous devez simplement être conscient qu'il existe des cas limites. C'est pourquoi les normes existent. Si votre système est conforme à POSIX, à SUS ou à UNIX. Il est probable que True
sera toujours retourné.