| 
| 
 | Вопрос # 5 626/ вопрос открыт / | 
 |  Приветствую, уважаемые эксперты! Чтобы узнать все параметры связанные с размером пространства диска (будь то жёсткий или сидиром или другое устройство), использую GetDiskFreeSpaceEx функцию... всё вроде нормально, но как можно более корректно узнавать размер например FDD без столь длительной задержки и вылетанием ошибки? К стати ошибка вылетает ещё когда в системе есть эмулирующее устройство дисковода (Alcohol и .т.д.), но ошибка вылетает именно тогда, когда нет диска в в этом эмуляционном дисководе. Как можно узнавать размер без ошибок? 
|  |   Вопрос задал: eclipse (статус: Посетитель)Вопрос отправлен: 7 сентября 2011, 16:16
 Состояние вопроса: открыт, ответов: 0.
 |  
 Мини-форум вопросаВсего сообщений: 3; последнее сообщение — 7 сентября 2011, 16:39; участников в обсуждении: 2. 
|   | Вадим К (статус: Академик), 7 сентября 2011, 16:19 [#1]:ошибки убираются через try-except или через {$I-} {$I+} А вот то, что так медленно идет доступ к флоппу... ну не может он быстрее, не может. физически.
 Галочка "подтверждения прочтения" - вселенское зло. |  
|   | eclipse (статус: Посетитель), 7 сентября 2011, 16:28 [#2]:Хм... пробовал через try ... except ... ошибка вылетает по факту, что программа уже обратилась к дисководу. Т.е. ошибка вылетает не от программы моей, а от винды.... типа устройство не готово. |  
|   | 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-} ? Галочка "подтверждения прочтения" - вселенское зло. |  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |