我正在尝试检查路径符号链接硬链接或Windows上的连接点
我该怎么做? os.path.islink()
无法正常工作。它始终返回False
我通过下一个方法创建符号链接:
mklink /d linkPath targetDir
mklink /h linkPath targetDir
mklink /j linkPath targetDir
我使用了命令行,因为os.link和os.symlink仅在Unix系统上可用
也许有任何命令行工具吗? 感谢
答案 0 :(得分:2)
os.path.islink()
docstring声明:
Test for symbolic link.
On WindowsNT/95 and OS/2 always returns false
在Windows中,链接以.lnk
结尾,用于文件和文件夹,因此您可以创建添加此扩展程序的功能,并使用os.path.isfile()
和os.path.isfolder()
进行检查,例如:
mylink = lambda path: os.path.isfile(path + '.lnk') or os.path.isdir(path + '.lnk')
答案 1 :(得分:1)
这适用于使用NTFS文件系统的Windows 8.1上的Python 3.3。
islink()为符号链接(使用mklink创建)返回True,为普通文件返回False。
答案 2 :(得分:0)
来自https://eklausmeier.wordpress.com/2015/10/27/working-with-windows-junctions-in-python/
(另请参见:Having trouble implementing a readlink() function)
from ctypes import WinDLL, WinError
from ctypes.wintypes import DWORD, LPCWSTR
kernel32 = WinDLL('kernel32')
GetFileAttributesW = kernel32.GetFileAttributesW
GetFileAttributesW.restype = DWORD
GetFileAttributesW.argtypes = (LPCWSTR,) #lpFileName In
INVALID_FILE_ATTRIBUTES = 0xFFFFFFFF
FILE_ATTRIBUTE_REPARSE_POINT = 0x00400
def islink(path):
result = GetFileAttributesW(path)
if result == INVALID_FILE_ATTRIBUTES:
raise WinError()
return bool(result & FILE_ATTRIBUTE_REPARSE_POINT)
if __name__ == '__main__':
path = "C:\\Programme" # "C:\\Program Files" on a German Windows.
b = islink(path)
print path, 'is link:', b