Как я могу определить, есть ли в дисководе дискета?

Я пытался использовать DriveInfo.IsReady, но он возвращает false, если в дисководе находится неформатированная дискета.

Моя первая реакция была: «Посмотрите на подъездную дорогу». Но я понял, что это, наверное, ничего не стоит. Почему больше нет дисководов?

Jon Ericson 26.09.2008 00:27

В этом есть смысл, не так ли? НЕФОРМАТИРОВАННЫЙ диск явно не готов :-)

Orion Edwards 26.09.2008 00:29

FWIW, также см. Эту запись в блоге от Old New Thing blogs.msdn.com/oldnewthing/archive/2009/04/02/9528175.aspx

Jonas Engström 01.07.2009 00:13
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
5
3
1 085
7
Перейти к ответу Данный вопрос помечен как решенный

Ответы 7

Проще говоря: нельзя. Флоппи-дисководы этого не поддерживают.

Флоппи-дисководы ПОДДЕРЖИВАЮТ обнаружение носителей. Попробуйте сохранить данные из Блокнота на пустой диск или на диск с неформатированным диском. Блокнот дает два разных ответа.

Baxtor 26.09.2008 00:00

Обратите внимание, что перед тем, как это произойдет, загорится индикатор доступа к диску. Блокнот пытается прочитать сектор на диске, и в случае неудачи отображает сообщение «Пожалуйста, вставьте диск».

OwenP 01.10.2008 01:35

что насчет DriveNotFoundException?

У меня нет дисковода гибких дисков в компьютере, на котором я сейчас работаю, поэтому я не могу его проверить. Это исключение возникает, когда дисковод недоступен, что, как я полагаю, будет соблюдаться, когда дисковод для гибких дисков пуст.

Пока я не могу найти какой-либо метод .Net, который действует по-разному для случая отсутствия гибких дисков и неформатированного корпуса гибких дисков.

Baxtor 26.09.2008 00:02

Возможно, вы можете взглянуть на API управления дисками ... Это должно помочь вам определить емкость диска (независимо от того, отформатирован он или нет) ...

А если нет емкости, значит, дискета не вставлена ​​...

Перехватить как DiscNotReady (если в дисководе нет диска), так и записать исключения (для недопустимой файловой системы / не отформатирован).

Ответ принят как подходящий

Вы всегда можете попробовать прочитать сектор с дискеты и посмотреть, удастся это или нет.

Я понятия не имею, как это сделать в .NET, но вот эквивалент C / C++.

SetLastError(0);
HANDLE h = CreateFile("\\.\A:", ...);
if (!ReadFile(h, buf, 512, &bytes_read, 0))
{
  DWORD err = GetLastError();
}

CreateFile, ReadFile

Материал Йонаса работал:

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;

}

Если вы вставляете неформатированную дискету в дисковод для гибких дисков, обычно целью является использование этого дисковода с этой дискетой. Первым шагом будет логическое форматирование этой дискеты.

Итак, если вы обнаружите неподготовленный дисковод для гибких дисков, вы можете попытаться отформатировать диск, и если это удастся, ваш дисковод должен быть готов с недавно отформатированной дискетой. Если форматирование неподготовленного дисковода гибких дисков завершается неудачно, значит, в нем нет дискеты или она неисправна. Затем вы можете показать сообщение, чтобы вставить дискету в дисковод.

Другие вопросы по теме