首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >仅知道驱动器盘符,确定驱动器是否可移动(闪存或硬盘)

仅知道驱动器盘符,确定驱动器是否可移动(闪存或硬盘)
EN

Stack Overflow用户
提问于 2013-01-31 16:15:12
回答 2查看 1.8K关注 0票数 1

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

它在本地驱动器上运行良好:

代码语言:javascript
复制
bool IsDriveRemovableOrRemote(CString driveRoot)
{
    UINT driveType = GetDriveType(driveRoot);
    return (DRIVE_REMOVABLE == driveType || DRIVE_CDROM == driveType || DRIVE_NO_ROOT_DIR == driveType || DRIVE_REMOTE == driveType);
}

我没有闪存/外部驱动器来测试自动取款机,但我希望有人能告诉我我的解释是否正确?如果是这样,我应该使用哪种更好的替代方案?

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-01-31 16:19:30

你应该更仔细地阅读文档。虽然闪存驱动器被认为是固定设备,但在该链接页面中有一条注释:

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

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

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

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

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

票数 2
EN

Stack Overflow用户

发布于 2013-01-31 16:30:32

您可以尝试使用DeviceIoControl并通过将IOCTL_STORAGE_QUERY_PROPERTY作为其第二个参数传递来查询BusType = BusTypeUsb。请阅读托马斯·李在page底部所著的Determining

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14621211

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档