Я пытался использовать DriveInfo.IsReady, но он возвращает false, если в дисководе находится неформатированная дискета.
В этом есть смысл, не так ли? НЕФОРМАТИРОВАННЫЙ диск явно не готов :-)
FWIW, также см. Эту запись в блоге от Old New Thing blogs.msdn.com/oldnewthing/archive/2009/04/02/9528175.aspx





Проще говоря: нельзя. Флоппи-дисководы этого не поддерживают.
Флоппи-дисководы ПОДДЕРЖИВАЮТ обнаружение носителей. Попробуйте сохранить данные из Блокнота на пустой диск или на диск с неформатированным диском. Блокнот дает два разных ответа.
Обратите внимание, что перед тем, как это произойдет, загорится индикатор доступа к диску. Блокнот пытается прочитать сектор на диске, и в случае неудачи отображает сообщение «Пожалуйста, вставьте диск».
что насчет DriveNotFoundException?
У меня нет дисковода гибких дисков в компьютере, на котором я сейчас работаю, поэтому я не могу его проверить. Это исключение возникает, когда дисковод недоступен, что, как я полагаю, будет соблюдаться, когда дисковод для гибких дисков пуст.
Пока я не могу найти какой-либо метод .Net, который действует по-разному для случая отсутствия гибких дисков и неформатированного корпуса гибких дисков.
Возможно, вы можете взглянуть на API управления дисками ... Это должно помочь вам определить емкость диска (независимо от того, отформатирован он или нет) ...
А если нет емкости, значит, дискета не вставлена ...
Перехватить как DiscNotReady (если в дисководе нет диска), так и записать исключения (для недопустимой файловой системы / не отформатирован).
Вы всегда можете попробовать прочитать сектор с дискеты и посмотреть, удастся это или нет.
Я понятия не имею, как это сделать в .NET, но вот эквивалент C / C++.
SetLastError(0);
HANDLE h = CreateFile("\\.\A:", ...);
if (!ReadFile(h, buf, 512, &bytes_read, 0))
{
DWORD err = GetLastError();
}
Материал Йонаса работал:
bool MyDll::Class1::HasFloppy( wchar_t driveLetter ) {
wchar_t path[] = L"\\.\A:";
path[ 4 ] = driveLetter;
SetLastError( 0 );
HANDLE drive = CreateFile( path, //__in LPCTSTR lpFileName,
GENERIC_READ, //__in DWORD dwDesiredAccess,
0, //__in DWORD dwShareMode,
0, //__in_opt LPSECURITY_ATTRIBUTES lpSecurityAttributes,
OPEN_EXISTING, //__in DWORD dwCreationDisposition,
0, //__in DWORD dwFlagsAndAttributes,
0 //__in_opt HANDLE hTemplateFile
);
DWORD bytes_read;
char buf[ 512 ];
DWORD err( 0 );
if ( !ReadFile( drive, buf, 512, &bytes_read, 0 ) )
err = GetLastError();
CloseHandle( drive );
return err != ERROR_NOT_READY;
}
Если вы вставляете неформатированную дискету в дисковод для гибких дисков, обычно целью является использование этого дисковода с этой дискетой. Первым шагом будет логическое форматирование этой дискеты.
Итак, если вы обнаружите неподготовленный дисковод для гибких дисков, вы можете попытаться отформатировать диск, и если это удастся, ваш дисковод должен быть готов с недавно отформатированной дискетой. Если форматирование неподготовленного дисковода гибких дисков завершается неудачно, значит, в нем нет дискеты или она неисправна. Затем вы можете показать сообщение, чтобы вставить дискету в дисковод.
Моя первая реакция была: «Посмотрите на подъездную дорогу». Но я понял, что это, наверное, ничего не стоит. Почему больше нет дисководов?