7

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

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

因此,处理该问题的一种方法是使用 FindFirstFile,但我不知道有什么方法可以让该错误远离用户。

4

2 回答 2

5

终于我找到了!这里成功的关键是GetVolumeInformation()

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

于 2012-12-25T15:05:54.307 回答
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

于 2012-12-25T00:25:51.327 回答