Réponse : Il n'existe pas de méthode infaillible pour comparer deux chemins d'accès de chaîne afin de déterminer s'ils pointent vers le même fichier.
La raison principale est que des chemins d'accès apparemment sans lien peuvent pointer exactement vers le même fichier en raison de redirections du système de fichiers (jonctions, liens symboliques, etc.). Par exemple
"d: \temp\foo.txt" "c: \othertemp\foo.txt"
Ces chemins d'accès peuvent potentiellement pointer vers le même fichier. Ce cas élimine clairement toute fonction de comparaison de chaîne comme base pour déterminer si deux chemins pointent vers le même fichier.
Le niveau suivant consiste à comparer les informations du fichier OS. Ouvrez le fichier pour deux chemins et comparez les informations de la poignée. Sous Windows, cela peut être fait avec GetFileInformationByHandle. Lucian Wischik a fait un excellent post sur ce sujet ici.
Cependant, il y a encore un problème avec cette approche. Cela ne fonctionne que si le compte utilisateur effectuant la vérification est capable d'ouvrir les deux fichiers en lecture. Il existe de nombreux éléments qui peuvent empêcher un utilisateur d'ouvrir l'un ou l'autre des fichiers. Y compris mais sans s'y limiter ...
- Manque de permissions suffisantes pour le fichier
- Manque de permissions suffisantes pour un répertoire dans le chemin du fichier
- Modification du système de fichiers survenant entre l'ouverture du premier fichier et du second, comme une déconnexion du réseau.
Lorsque vous commencez à examiner tous ces problèmes, vous commencez à comprendre pourquoi Windows ne fournit pas de méthode pour déterminer si deux chemins sont les mêmes. Ce n'est tout simplement pas une question facile/possible à répondre.