如何检查usb插槽中是否有空的闪存卡读卡器?

时间:2012-12-25 00:22:32

标签: c++ winapi

我使用GetLogicalDrives()来获取计算机上的所有驱动器,但该功能不仅显示可以使用的卷,而且还显示没有卡的空闪存读卡器。接下来,GetDriveType()显示此类卷的代码2。而且无论插槽中是否存在闪存卡,都是如此。一些多读卡器产生了许多这样的不存在的驱动器,问题是如何确定这种卷的正确状态。

尝试在这样的非现有驱动器上调用FindFirstFile()即使在控制台应用程序中也会产生视觉错误:Exception Processing Message c0000013 Parameters 75b3bf7c 4 75b3bf7c 75b3bf7c此类错误后代码继续运行,但这个恼人的错误会显示给用户窗口,因为应用程序会发生严重的崩溃。

因此,处理这种方法的一种方法是使用FindFirstFile,但我不知道如何将错误排除在用户之外。

2 个答案:

答案 0 :(得分:5)

最后我发现了!这里成功的关键是GetVolumeInformation()

当usb插槽中有空读卡器时,它返回0并将最后一个错误设置为21。 :)

答案 1 :(得分:1)

以下是一些很好的选择:

特别是:

if( 2 == ::getDriveType( <driveletter> ))

返回函数值:

DRIVE_UNKNOWN 0:无法确定驱动器类型。

DRIVE_NO_ROOT_DIR 1:根路径无效;例如,指定的路径上没有安装卷。

DRIVE_REMOVABLE 2:驱动器具有可移动介质;例如,软盘驱动器,拇指驱动器或闪存卡读卡器。

DRIVE_FIXED 3:驱动器有固定介质;例如,硬盘驱动器或闪存驱动器。

DRIVE_REMOTE 4:驱动器是远程(网络)驱动器。

DRIVE_CDROM 5:驱动器是CD-ROM驱动器。

DRIVE_RAMDISK 6:驱动器是RAM磁盘。

http://msdn.microsoft.com/en-us/library/windows/desktop/aa364939(v=vs.85).aspx