У меня есть следующий код:
std::wstring GetSymbolicLinkTarget(std::wstring const& linkPath)
{
TCHAR path[MAX_PATH];
CAutoFile hFile = CreateFile( linkPath.c_str(),
FILE_READ_EA,
FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE,
0,
OPEN_EXISTING,
FILE_FLAG_BACKUP_SEMANTICS | FILE_ATTRIBUTE_REPARSE_POINT | FILE_FLAG_OPEN_REPARSE_POINT,
0);
if (INVALID_HANDLE_VALUE != hFile)
{
auto rcode = GetFinalPathNameByHandle(hFile, path, MAX_PATH, FILE_NAME_NORMALIZED);
switch (rcode)
{
case ERROR_PATH_NOT_FOUND:
return std::wstring();
case ERROR_NOT_ENOUGH_MEMORY:
return std::wstring();
case ERROR_INVALID_PARAMETER:
return std::wstring();
case ERROR_ACCESS_DENIED:
return std::wstring();
default:
break;
};
if (path[0] == '\\' && path[1] == '\\' && path[2] == '?' && path[3] == '\\')
return std::wstring(path + 4, path + MAX_PATH);
else
return std::wstring(path, path + MAX_PATH);
}
return std::wstring();
}
Я создаю символическую ссылку примерно так:
e:
cd Projects\ProjectA\IDE_Files
mklink /D src ..
Затем в некотором коде я вызываю вышеуказанную функцию, которая согласно документам гласит:
e:\Projects\ProjectA\IDE_Files\src
должно разрешить до:
e:\Projects\ProjectA
Вместо этого он просто возвращает путь ввода:
e:\Projects\ProjectA\IDE_Files\src
Результат rcode
содержит количество символов в пути. Не код ошибки.
Почему это не дает ожидаемых результатов?