Интересно, есть ли API для различения дискеты и флешки в windows, C ++ И можно ли привязать флешку к A: \? Огромное спасибо!
Как определить, является ли драйвер дискетой или съемной флешкой на C ++?
Ответы (3)
Во-первых, вам нужно получить тип диска (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. Если у вас возникнут проблемы, я могу предоставить вам весь код.
pDevDesc->BusType == BusTypeUsb
тоже.
- person MSalters; 02.02.2010
Вы можете изменить буквы, присвоенные вашим дискам, где-нибудь в System Control, так что флэш-диск может быть A :.
Используйте API ОС для запроса, например. размер диска, которого должно хватить, чтобы различать дискету и флешку.
Можно связать флэш-диск с A :, но только если у вас нет дисководов для гибких дисков.
См. Определение имени устройства MS-DOS для получения информации о том, как это сделать в программе.
Вы можете определить, соответствует ли буква диска устройству гибких дисков, используя QueryDosDevice на букву диска. Дисководы возвращают "\ Device \ Floppy0" или "\ Device \ Floppy1"
\Device\Floppy<x>
не (всегда) используются для USB-дисководов гибких дисков.
- person MSalters; 01.02.2010