Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: WinAPI и системное программирование > Ошибка при вызове GetFileAttributes


Автор: MetalFan 28.7.2009, 12:52
Ситуация: имеется комп без дисковода, в винде (XP SP3)  в устройствах есть. диск А: в списке дисков есть.
http://pic.ipicture.ru/uploads/090728/dKJI1412w6.jpg
При попытке зайти на него в експлорере получаем окно:
http://pic.ipicture.ru/uploads/090728/ER3DH4cLUG.jpg
Если написать следующий код (BDS 2006):
Код

...  
lRes := GetFileAttributes('A:\');
...

то получаем сообщение:
Windows - Drive Not Ready
Exception Processing Message c00000a3 Parameters...
http://pic.ipicture.ru/uploads/090728/08AnzY7K3v.jpg
и lRes = -1...

Вопрос: как отловить и обработать эту ошибку? try..except ее не ловит(((

з.ы. Такая ошибка выдается при любом обращении к диску А:, в т.ч. и с пом. FindFirstFile и т.п.(

Автор: Keeper89 28.7.2009, 13:20
Вот это не поможет: 
http://www.delphipages.com/forum/showthread.php?t=7083
http://articles.org.ru/myfaq/00102002.php - про проверку готовности дисковода.

Автор: MetalFan 28.7.2009, 13:49
Keeper89, спасибо! навел на решение!
Код

var
  lRes : Integer;
  lEM: Integer;
begin
  lEM := SetErrorMode( SEM_FAILCRITICALERRORS );
  SetErrorMode( lEM or SEM_FAILCRITICALERRORS );
  try
    lRes := GetFileAttributes('A:\');
    if lRes = -1 then
      ShowMessage(SysErrorMessage(GetLastError));
  finally
    SetErrorMode(lEM);
  end;

с меня +
p.s. подкорректировано согласно замечанию CodeMonkey.

Автор: CodeMonkey 28.7.2009, 14:47
http://transl-gunsmoker.blogspot.com/2009/05/blog-post_7756.html ;)

Автор: MetalFan 28.7.2009, 14:55
CodeMonkey, а можно как-то еще "вылечить" эту ошибку? кроме как установка ErrorMode?

Автор: CodeMonkey 28.7.2009, 18:27
Я другого способа не знаю.
А этот чем не понравился? При старте программы добавить флаг SEM_FAILCRITICALERRORS и всё.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)