<分区>
我有这样的设备路径
Device\HarddiskVolume2\Windows\
我想把它转换成这样的普通路径
C:\Windows
我尝试使用 (_fullpath-_splitpath-etc...) 但没有新结果。这个工作是哪个函数?
<分区>
我有这样的设备路径
Device\HarddiskVolume2\Windows\
我想把它转换成这样的普通路径
C:\Windows
我尝试使用 (_fullpath-_splitpath-etc...) 但没有新结果。这个工作是哪个函数?
最佳答案
一种选择是将 Device\
替换为 \\?\
,如下所示:
\\?\HarddiskVolume2\Windows\
然后您可以使用带有 FILE_FLAG_BACKUP
标志的 CreateFile()
打开目录句柄,然后调用 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;
}
大概有一个执行转换的内部函数,并且可以使用它而不是必须打开一个句柄,但据我所知没有记录。
关于c++ - 将 HarddiskVolume 路径转换为普通路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31016538/