没有前置'\\?\'的GetFinalPathNameByHandle()结果

amz*_*mza 3 c++ winapi file-management

这是我的代码段:

char existingTarget[MAX_PATH]; 
HANDLE hFile = CreateFile(linkPath.c_str(), GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if (INVALID_HANDLE_VALUE != hFile)
{
    GetFinalPathNameByHandle(hFile, existingTarget, MAX_PATH, FILE_NAME_OPENED);
    CloseHandle(hFile);
}
Run Code Online (Sandbox Code Playgroud)

但是,existingTarget即将出来\\?\C:\mydir\etc。我怎样才能让它返回C:\mydir\etc呢?

:我不想来检查字符串\\?\和公正的memmove,它有点太hackish的这个程序的解决方案。

Rem*_*eau 5

我怎样才能让它只返回C:\ mydir \ etc

你不能。 VOLUME_NAME_DOSVOLUME_NAME_GUID 始终使用该格式,并记录如下:

此函数返回的字符串使用\\?\语法。

请参阅文档 “社区添加”部分中的示例结果

注意:我不想检查字符串,\\?\而只是记忆它,这对于该程序的解决方案来说有点过于简单。

那是最简单的解决方案。否则,您必须使用其他API将返回的路径转换为更易于理解的路径。例如使用VOLUME_NAME_NTwith 的结果QueryDosDevice(),或使用VOLUME_NAME_GUIDwith 的结果GetVolumePathNamesForVolumeName()

  • @BillyONeal 这毫无意义。阅读你写的内容。 (3认同)