Функция возвращает путь к файлу/папке на которые указывает символическая ссылка (Symbolic link) или точка соединения (Junction Point).
1 2 3 4 5 6 7 8 9 |
var path: string; linkTarget: string; begin path:= 'C:\Documents and Settings'; linkTarget:= SymLinkTarget(path); ShowMessage(linkTarget); end; |
Параметры
path - путь к символической ссылке или точке соединения
Результат
Путь к цели символической ссылки или точки соединения.
Если объект не является ссылкой, вернется путь к нему.
Если объект не найден, системное сообщение: System error. Code: 2. Не удается найти указанный файл.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
function SymLinkTarget(path: string): string; var LinkHandle: THandle; TargetName: array [0..512] of Char; begin LinkHandle := CreateFile(PChar(path), 0, FILE_SHARE_READ, nil, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, 0); Win32Check(LinkHandle <> INVALID_HANDLE_VALUE); try if GetFinalPathNameByHandle(LinkHandle, TargetName, 512, FILE_NAME_NORMALIZED) > 0 then Result:= Copy(TargetName, 5, maxint) // TargetName получаем в виде UNC пути (\\?\C:\Users\...) else RaiseLastOSError; finally CloseHandle(LinkHandle); end; end; |