|
Вопрос # 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-} ?
Галочка "подтверждения прочтения" - вселенское зло.
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|