使用windows API区分移动硬盘和本地硬盘

本文介绍了一种在Windows环境下通过API来区分移动硬盘和本地硬盘的方法。首先,利用GetLogicalDriveStrings和GetDriveType检测可移动驱动器,接着用GetVolumeInformation确认磁盘是否已插入。对于DRIVE_FIXED类型的硬盘,通过CreateFile打开设备并用DeviceIoControl获取设备信息,判断总线类型是否为USB来确定是否为移动硬盘。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

       在程序中,有时候需要区分移动硬盘和本地硬盘,U盘的检测比较简单,首先用GetLogicalDriveStrings获取盘符,然后用GetDriveType获取类型,返回结果为DRIVE_REMOVABLE,则为U盘。这里有个问题,就是如果电脑中存在可移动磁盘的盘符,却没有插入移动磁盘,这时候如果试图打开这个磁盘,系统会提示你插入磁盘。所以,应该在检测到类型为DRIVE_REMOVABLE之后,再使用GetVolumeInformation获取卷信息,如果获取成功,则说明该盘符已插入磁盘。

       对于移动硬盘,使用GetDriveType返回的结果永远为DRIVE_FIXED,就是说系统将其与本地硬盘归为一类。那么,如何区分指定盘符是移动硬盘还是本地硬盘呢?

       首先用CreateFile通过指定的盘符打开设备,返回设备句柄,然后用DeviceIoControl获取设备信息,通过总线类型判断是否USB接入,如果总线类型为USB则是移动硬盘。

       代码如下:

bool CopyFileThread::checkRemoveDisk(vector<LPTSTR>* drivePath)   //参数存储所有移动盘的盘符
{
 bool flag=false;
 DWORD dw=GetLogicalDriveStrings(0,NULL);
 LPTSTR lpDriveStrings=(LPTSTR)HeapAlloc(GetProcessHeap(),0,dw*sizeof(TCHAR));
 GetLogicalDriveStrings(dw,lpDriveStrings);      //获取盘符,字符串形式。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值