我正在尝试检查 Windows 上的路径符号链接硬链接或连接点我该怎么做?os.path.islink()
不行。它总是返回False
我通过下一个方法创建符号链接:
mklink /d linkPath targetDir
mklink /h linkPath targetDir
mklink /j linkPath targetDir
我使用命令行是因为 os.link 和 os.symlink 仅在 Unix 系统上可用
也许有任何命令行工具?谢谢
os.path.islink()
文档字符串指出:
Test for symbolic link.
On WindowsNT/95 and OS/2 always returns false
在 Windows 中,文件和文件夹的链接以 , 结尾.lnk
,因此您可以创建一个添加此扩展名并使用 and 检查的函数os.path.isfile()
,os.path.isfolder()
例如:
mylink = lambda path: os.path.isfile(path + '.lnk') or os.path.isdir(path + '.lnk')
这适用于使用 NTFS 文件系统的 Windows 8.1 上的 Python 3.3。
islink() 为符号链接(使用 mklink 创建)返回 True,为普通文件返回 False。
取自https://eklausmeier.wordpress.com/2015/10/27/working-with-windows-junctions-in-python/
(另请参阅:实现 readlink() 函数时遇到问题)
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