我正在尝试确定文件是否在本地驱动器上。我发现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但我想是否有人可以告诉我我的解释是否正确?如果是的话,我应该使用哪种更好的替代方案?
请记住,我只有文件的路径。
答案 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 。