函数 GetDriveTypeW 总是 returns DRIVE_NO_ROOT_DIR
Function GetDriveTypeW always returns DRIVE_NO_ROOT_DIR
如标题所说,标准 Windows GetDriveTypeW returns 值 1 (DRIVE_NO_ROOT_DIR) 用于所有传递的路径。
文档说
The root path is invalid; for example, there is no volume mounted at
the specified path.
虽然我很确定提供的路径(例如“C:\\temp”、“c:\\temp”)是有效的并且是固定驱动器(硬盘)。
我错过了什么吗?什么可能导致这个?任何帮助将不胜感激 - 我对 WinAPI 不是很熟悉。
bool FileAttributesRetriever::IsExternalPath(const std::filesystem::path& path)
{
uint32_t driveType = GetDriveTypeW(path.wstring().c_str()); // Always 1 / DRIVE_NO_ROOT_DIR
switch (driveType)
{
case DRIVE_REMOTE: // Network storage.
case DRIVE_REMOVABLE: // External drive.
{
return true;
}
default:
{
return false;
}
}
}
文档还说参数必须是:
The root directory for the drive.
A trailing backslash is required...
也就是说,如果要检查 C: 驱动器,则应使用 C:\
调用它,如果要检查安装在 C:\temp
的驱动器,则应使用 C:\temp\
调用它。
如标题所说,标准 Windows GetDriveTypeW returns 值 1 (DRIVE_NO_ROOT_DIR) 用于所有传递的路径。
文档说
The root path is invalid; for example, there is no volume mounted at the specified path.
虽然我很确定提供的路径(例如“C:\\temp”、“c:\\temp”)是有效的并且是固定驱动器(硬盘)。
我错过了什么吗?什么可能导致这个?任何帮助将不胜感激 - 我对 WinAPI 不是很熟悉。
bool FileAttributesRetriever::IsExternalPath(const std::filesystem::path& path)
{
uint32_t driveType = GetDriveTypeW(path.wstring().c_str()); // Always 1 / DRIVE_NO_ROOT_DIR
switch (driveType)
{
case DRIVE_REMOTE: // Network storage.
case DRIVE_REMOVABLE: // External drive.
{
return true;
}
default:
{
return false;
}
}
}
文档还说参数必须是:
The root directory for the drive.
A trailing backslash is required...
也就是说,如果要检查 C: 驱动器,则应使用 C:\
调用它,如果要检查安装在 C:\temp
的驱动器,则应使用 C:\temp\
调用它。