1

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

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

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

我没有闪存/外部驱动器来测试 ATM,但我想知道是否有人能告诉我我的解释是否正确?如果是这样,我应该使用什么更好的选择?

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

4

2 回答 2

2

您应该更仔细地阅读 doco。虽然闪存驱动器被视为固定设备,但该链接页面中有一条注释:

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

如果你从路径开始,这个过程似乎有点混乱,但你可以从这里开始阅读文档。看起来您可能需要枚举设备,直到找到与您的驱动器匹配的设备。

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

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

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

于 2013-01-31T08:19:29.987 回答
1

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

于 2013-01-31T08:30:32.063 回答