我想知道在Windows,C ++中是否存在区分软盘和闪存盘的API 是否可以将闪存盘链接到A:\? 非常感谢!
答案 0 :(得分:2)
首先,您需要获取驱动器的类型(GetDriveTypeA)。如果结果等于DRIVE_REMOVABLE,则字母驱动器将指向可移动闪存驱动器的软盘(或者可能是其他类型的可移动磁盘)。如果结果不是DRIVE_REMOVABLE,则不可能是可移动闪存驱动器。但是,从Window的角度来看,外部USB硬盘和可移动闪存盘之间没有什么区别(我认为唯一的区别是可移动闪存盘没有分区表,所以它只有一个分区 - 虽然我不太确定。)
无论如何,对于DRIVE_REMOVABLE类型,您需要查询设备的更高级属性。为了做到这一点,首先你需要像这样打开物理设备:
hDevice = CreateFileA("\\\\?\\X:", GENERIC_READ, FILE_SHARE_READ|FILE_SHARE_DELETE, NULL, OPEN_EXISTING, 0, NULL)
如果打开成功,则需要向此设备发出DeviceIoControl命令:
STORAGE_PROPERTY_QUERY Query;
Query.PropertyId = StorageDeviceProperty;
Query.QueryType = PropertyStandardQuery;
bResult = DeviceIoControl(
hDevice, // device handle
IOCTL_STORAGE_QUERY_PROPERTY, // info of device property
&Query, sizeof(STORAGE_PROPERTY_QUERY), // input data buffer
pDevDesc, pDevDesc->Size, // output data buffer
&dwOutBytes, // out's length
(LPOVERLAPPED)NULL
);
如果pDevDesc-> BusType == BusTypeUsb,则X:指向可移动闪存驱动器。代码有效,但是您需要阅读DeviceIoControl的文档才能设置pDevDesc参数。如果你有问题,我可以给你整个代码。
答案 1 :(得分:0)
您可以在系统控制中的某处更改分配给驱动器的字母,因此闪存盘可以是A :.
使用OS API查询例如。磁盘的大小,应该足以区分软盘和闪存盘。
答案 2 :(得分:0)
可以将闪存盘链接到A:,但前提是您没有软盘驱动器 有关如何在程序中执行此操作的信息,请参阅Defining an MS-DOS Device Name。
您可以使用驱动器号上的QueryDosDevice来确定驱动器号是否映射到软盘设备。软盘驱动器将返回“\ Device \ Floppy0”或“\ Device \ Floppy1”