Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 5 626

/ вопрос открыт /

Приветствую, уважаемые эксперты! Чтобы узнать все параметры связанные с размером пространства диска (будь то жёсткий или сидиром или другое устройство), использую GetDiskFreeSpaceEx функцию... всё вроде нормально, но как можно более корректно узнавать размер например FDD без столь длительной задержки и вылетанием ошибки? К стати ошибка вылетает ещё когда в системе есть эмулирующее устройство дисковода (Alcohol и .т.д.), но ошибка вылетает именно тогда, когда нет диска в в этом эмуляционном дисководе. Как можно узнавать размер без ошибок?

eclipse Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: eclipse (статус: Посетитель)
Вопрос отправлен: 7 сентября 2011, 16:16
Состояние вопроса: открыт, ответов: 0.


Мини-форум вопроса

Всего сообщений: 3; последнее сообщение — 7 сентября 2011, 16:39; участников в обсуждении: 2.
Вадим К

Вадим К (статус: Академик), 7 сентября 2011, 16:19 [#1]:

ошибки убираются через try-except или через {$I-} {$I+}
А вот то, что так медленно идет доступ к флоппу... ну не может он быстрее, не может. физически.
Галочка "подтверждения прочтения" - вселенское зло.
eclipse

eclipse (статус: Посетитель), 7 сентября 2011, 16:28 [#2]:

Хм... пробовал через try ... except ... ошибка вылетает по факту, что программа уже обратилась к дисководу. Т.е. ошибка вылетает не от программы моей, а от винды.... типа устройство не готово.
eclipse

eclipse (статус: Посетитель), 7 сентября 2011, 16:39 [#3]:

О! так в общем нашёл выход:

function DiskInDrive(Drive: Char): Boolean; 
  // Disk can be a floppy, CD-ROM,... 
var 
  ErrorMode: Word; 
begin 
  { make it upper case } 
  if Drive in ['a'..'z'] then Dec(Drive, $20); 
  { make sure it's a letter } 
  if not (Drive in ['A'..'Z']) then 
    raise EConvertError.Create('Not a valid drive ID'); 
  { turn off critical errors } 
  ErrorMode := SetErrorMode(SEM_FailCriticalErrors); 
  try 
    { drive 1 = a, 2 = b, 3 = c, etc. } 
    if DiskSize(Ord(Drive) - $40) = -1 then 
      Result := False 
    else 
      Result := True; 
  finally 
    { Restore old error mode } 
    SetErrorMode(ErrorMode); 
  end; 
end;
Вадим К

Вадим К (статус: Академик), 7 сентября 2011, 16:39 [#3]:

а {$I-} ?
Галочка "подтверждения прочтения" - вселенское зло.

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 марта 2023, 13:04
Выполнено за 0.02 сек.
Рейтинг@Mail.ru