我有像这样的设备路径
设备\ HarddiskVolume2 \的Windows \
我希望将此转换为这样的正常路径
C:\视窗
我尝试使用(_fullpath-_splitpath-etc. ...)但没有新结果。这项工作有哪些功能?
答案 0 :(得分:1)
一种选择是将Device\
替换为\\?\
,如下所示:
\\?\HarddiskVolume2\Windows\
然后,您可以使用带有CreateFile()
标志的FILE_FLAG_BACKUP
打开目录句柄,然后调用GetFinalPathNameByHandle()
以查找DOS路径。
#include <Windows.h>
#include <stdio.h>
int main(int argc, char ** argv)
{
wchar_t lpszFilePath[MAX_PATH + 1];
DWORD dw;
HANDLE hFile = CreateFileW(L"\\\\?\\HarddiskVolume2\\Windows\\", GENERIC_READ,
FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, NULL, OPEN_EXISTING,
FILE_FLAG_BACKUP_SEMANTICS, NULL);
if (hFile == INVALID_HANDLE_VALUE)
{
printf("CreateFile: %u\n", GetLastError());
return 1;
}
dw = GetFinalPathNameByHandleW(hFile,
lpszFilePath, _countof(lpszFilePath) - 1, VOLUME_NAME_DOS);
if (dw == 0)
{
printf("GetFPNBYH: %u\n", GetLastError());
return 1;
}
else if (dw >= _countof(lpszFilePath))
{
printf("GetFPNBYH: output requires %u characters\n", dw);
return 1;
}
printf("%ws\n", lpszFilePath);
return 0;
}
据推测,有一个内部函数可以执行转换,也许可以使用它而不必打开句柄,但据我所知,它没有记录。