我正在尝试确定文件是否在本地驱动器上。我找到了检索驱动器类型的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);
}我没有闪存/外部驱动器来测试自动取款机,但我希望有人能告诉我我的解释是否正确?如果是这样,我应该使用哪种更好的替代方案?
请记住,我只有文件的路径。
发布于 2013-01-31 16:19:30
你应该更仔细地阅读文档。虽然闪存驱动器被认为是固定设备,但在该链接页面中有一条注释:
要确定驱动器是否为USB型驱动器,请调用SetupDiGetDeviceRegistryProperty并指定SPDRP_REMOVAL_POLICY属性。
如果你从路径开始,这个过程看起来有点混乱,但是你可以开始阅读文档here。看起来你可能需要枚举设备,直到找到一个与你的驱动器匹配的设备。
为了避免对所有请求执行此操作,我将执行两个阶段的检查。如果您当前的方法说它不是固定的,请将其视为非本地的。
如果它说它是固定的,那么您可以使用我建议的方法来枚举设备以确定。
或者,您可以在第一次需要时枚举所有固定的非USB驱动器,然后缓存信息。我非常确定这些驱动器的列表在系统运行时不会改变--根据定义,添加和删除的驱动器都是可移除的。
发布于 2013-01-31 16:30:32
您可以尝试使用DeviceIoControl并通过将IOCTL_STORAGE_QUERY_PROPERTY作为其第二个参数传递来查询BusType = BusTypeUsb。请阅读托马斯·李在page底部所著的Determining 。
https://stackoverflow.com/questions/14621211
复制相似问题