Я пытаюсь выяснить, действительно ли папка является жесткой ссылкой на другую, и в этом случае узнать ее реальный путь.
Я сделал простой пример на питоне следующим образом (symLink.py):
#python 3.4
import os
dirList = [x[0] for x in os.walk('.')]
print (dirList)
for d in dirList:
print (os.path.realpath(d), os.path.islink(d))
"""
Given this directories structure:
<dir_path>\Example\
<dir_path>\Example\symLinks.py
<dir_path>\Example\hardLinkToF2 #hard link pointing to <dir_path>\Example\FOLDER1\FOLDER2
<dir_path>\Example\softLinkToF2 #soft link pointing to <dir_path>\Example\FOLDER1\FOLDER2
<dir_path>\Example\FOLDER1
<dir_path>\Example\FOLDER1\FOLDER2
The output from executing: C:\Python34\python <dir_path>\Example\symLinks.py is:
['.', '.\\FOLDER1', '.\\FOLDER1\\FOLDER2', '.\\hardLinkToF2']
<dir_path>\Example False
<dir_path>\Example\FOLDER1 False
<dir_path>\Example\FOLDER1\FOLDER2 False
<dir_path>\Example\hardLinkToF2 False
"""
В этом примере os.path.islink всегда возвращает False как для жесткой, так и для мягкой ссылки. С другой стороны, os.path.realpath возвращает фактический путь для программных ссылок, а не для жестких ссылок.
Я сделал этот пример, используя python 3.4 в Windows 8. Я понятия не имею, делаю ли я что-то не так или есть ли другой способ добиться этого.
islink
возвращает Always False, если среда выполнения Python не поддерживает символические ссылки. Возможно, это имеет отношение к поведению символической ссылки, которое вы видите. - person RobertB   schedule 30.01.2017FindFirstFileNameW
,FindNextFileNameW
иFindClose
. Для этого вы можете использовать ctypes или, если у вас установлен PyWin32, используйтеwin32file.FindFileNames
(похоже, есть ошибка, оставляющая конечный NUL в имени файла). - person Eryk Sun   schedule 30.01.2017