powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Как узнать есть ли дискета в дисководе без
11 сообщений из 11, страница 1 из 1
Как узнать есть ли дискета в дисководе без
    #35683181
W_and_G
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В WinXP иногда происходит такой баг: когда пытаемся открыть дискетку с помощью функции CreateFile, передавая первым параметром "\\.\a" (символы экранирования опущены, если речь идет о C/C++), но самой дискетки физически нет, то система выдает страшную ошибку или вообще рушится.

Быть может кто-нибудь знает как проверить есть ли дискета с помощью других методов?

Пробовал перебирать устройства с помощью SetupDiGetClassDevs по GUID_DEVINTERFACE_FLOPPY, чтобы достать SP_DEVICE_INTERFACE_DATA, а оттуда флаг статуса. Но! по этому гуиду ничего не находится.

Сам дисковод можно найти по GUID_DEVINTERFACE_VOLUME:
Код: plaintext
1.
2.
3.
4.
MFG = (Стандартные дисководы гибких дисков)
Enumerator Name = FDC
Instance ID = FDC\GENERIC_FLOPPY_DRIVE\ 1 &349DA29& 0 & 0 
Device Path = \\?\fdc#generic_floppy_drive# 1 &349da29& 0 & 0 #{53f5630d-b6bf-11d0-94f2-00a0c91efb8b}
Но если использовать CreateFile и подставлять туда этот DevicePath, то ему все равно есть дискета или ее нет.
Пробовал по полученному Handle отправлять через DeviceIoControl коды IOCTL_DISK_GET_DRIVE_GEOMETRY или IOCTL_STORAGE_GET_MEDIA_TYPES, но все равно не помогло, первый в любом случае вылетает со 1110 ошибой (ERROR_MEDIA_CHANGED - The media in the drive may have changed), а второму все равно есть дискета или нет.
...
Рейтинг: 0 / 0
Как узнать есть ли дискета в дисководе без
    #35683183
W_and_G
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
и еще один сопутсвующий вопрос, кто-нибудь знает, что за чудо устройства, кроме дискеток/дисководов должны находиться по GUID_DEVINTERFACE_FLOPPY??
...
Рейтинг: 0 / 0
Как узнать есть ли дискета в дисководе без
    #35683232
nik_x
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
W_and_Gи еще один сопутсвующий вопрос, кто-нибудь знает, что за чудо устройства, кроме дискеток/дисководов должны находиться по GUID_DEVINTERFACE_FLOPPY??

Zip.
...
Рейтинг: 0 / 0
Как узнать есть ли дискета в дисководе без
    #35683449
Kagamin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
помнится, где-то можно было указать какой-то флаг, чтобы при считывании дискеты не выводилась ошибка.
...
Рейтинг: 0 / 0
Как узнать есть ли дискета в дисководе без
    #35683456
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
W_and_Gпередавая первым параметром "\\.\a" (символы экранирования опущены, если речь идет о C/C++), но самой дискетки физически нет, то система выдает страшную ошибку или вообще рушится.
Что значит рушится? Каким образом?
...
Рейтинг: 0 / 0
Как узнать есть ли дискета в дисководе без
    #35684037
W_and_G
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nik_x , спасибо!

maytonЧто значит рушится? Каким образом?
Наверное происходит нечто более серьезное чем окошко со страшной ошибкой, возможно синий экран. Если дадите дня два-три уточню.
...
Рейтинг: 0 / 0
Как узнать есть ли дискета в дисководе без
    #35689769
W_and_G
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Рушится, значит вплоть до синего экрана. Данная проблема решается, если убрать несуществующий флоппи из настроек биоса.
...
Рейтинг: 0 / 0
Как узнать есть ли дискета в дисководе без
    #35689966
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну... значит это не баг WindowsXP ?
...
Рейтинг: 0 / 0
Как узнать есть ли дискета в дисководе без
    #35811375
crt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonНу... значит это не баг WindowsXP ?По хорошему ф-ция должна была бы возвращать ошибку, а не вызывать вылет в синий экран
...
Рейтинг: 0 / 0
Как узнать есть ли дискета в дисководе без
    #35811556
SoftParanoik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MSDN

To get the media type(s) supported by a floppy drive, it is necessary to call CreateFile() to get a handle to the drive and then DeviceIoControl() to get the information. However, if there is no floppy disk in the floppy drive, the following message box may appear when CreateFile() is called for drive A (\\.\a:):

There is no disk in the drive. Please insert a disk into drive A:
When calling CreateFile(), be sure to use 0 for the access mode and FILE_SHARE_READ for the share mode so that the user will not be prompted to insert a floppy disk:

CreateFile(
szFileName,
0,
FILE_SHARE_READ,
NULL,
OPEN_ALWAYS,
0,
NULL
);

Another way to avoid the message box prompt is to put
SetErrorMode( SEM_FAILCRITICALERRORS );
before the call to CreateFile().
...
Рейтинг: 0 / 0
Как узнать есть ли дискета в дисководе без
    #35846720
Фотография Java Programmer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
W_and_G,

Предлагаю захардкодить ответ - "дискеты в дисководе нет"
Потому что в современных компах дисководов нет :)

Ответ шуточный - не воспринимайте всерьез )
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Как узнать есть ли дискета в дисководе без
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]