我有一个设备路径如下:
Device\HarddiskVolume2\Windows\
我希望将其转换为普通路径,如下所示:
C:\Windows
我尝试使用 (_fullpath-_splitpath-等...) 但没有新的结果。哪个函数可以完成这项工作?
一种选项是将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;
}
可能有一个内部函数执行转换,可以使用它而不是打开句柄,但据我所知,它没有记录。