只知道驱动器号,确定驱动器是否可拆卸(闪存或HDD)

时间:2013-01-31 08:15:12

标签: windows model-view-controller drive

我正在尝试确定文件是否在本地驱动器上。我发现GetDriveType() WINAPI检索了驱动器类型。然而阅读它看起来的返回值的描述,这就是我理解它,它检索闪存驱动器作为固定,这不是我想要的。

它在本地驱动器上工作正常:

bool IsDriveRemovableOrRemote(CString driveRoot)
{
    UINT driveType = GetDriveType(driveRoot);
    return (DRIVE_REMOVABLE == driveType || DRIVE_CDROM == driveType || DRIVE_NO_ROOT_DIR == driveType || DRIVE_REMOTE == driveType);
}

我没有闪存/外置驱动器来测试ATM但我想是否有人可以告诉我我的解释是否正确?如果是的话,我应该使用哪种更好的替代方案?

请记住,我只有文件的路径。

2 个答案:

答案 0 :(得分:2)

你应该仔细阅读doco。虽然Flash驱动器被视为固定设备,但该链接页面中有一个注释:

  

要确定驱动器是否为USB类型驱动器,请调用SetupDiGetDeviceRegistryProperty并指定SPDRP_REMOVAL_POLICY属性。

如果你开始的只是路径,但是你可以开始阅读doco here,这个过程看起来有点乱。看起来您可能需要枚举设备,直到找到与您的驱动器匹配的设备。

为避免对您的所有请求执行此操作,我会进行两阶段检查。如果您当前的方法说它没有修复,请将其视为非本地方法。

如果它 已修复,那么您可以使用我建议的方法枚举设备以确定。

或者,您可以在第一次需要时枚举所有固定的非USB驱动器,然后只缓存信息。我非常肯定在系统运行时这些驱动器的列表不会改变 - 根据定义,添加和删除的驱动器是可移动的。

答案 1 :(得分:1)

您可以尝试使用DeviceIoControl并通过传递BusType = BusTypeUsb作为其第二个参数来查询IOCTL_STORAGE_QUERY_PROPERTY。请阅读page底部的Thomas Lee的确定USB