我使用GetLogicalDrives()
来获取计算机上的所有驱动器,但该功能不仅显示可以使用的卷,而且还显示没有卡的空闪存读卡器。接下来,GetDriveType()
显示此类卷的代码2。而且无论插槽中是否存在闪存卡,都是如此。一些多读卡器产生了许多这样的不存在的驱动器,问题是如何确定这种卷的正确状态。
尝试在这样的非现有驱动器上调用FindFirstFile()
即使在控制台应用程序中也会产生视觉错误:Exception Processing Message c0000013 Parameters 75b3bf7c 4 75b3bf7c 75b3bf7c
此类错误后代码继续运行,但这个恼人的错误会显示给用户窗口,因为应用程序会发生严重的崩溃。
因此,处理这种方法的一种方法是使用FindFirstFile,但我不知道如何将错误排除在用户之外。
答案 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