Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

ForceDirectories и Exception


Andy BitOff ©   (2008-10-28 17:16:00) 

Чего-то я не пойму, это у всех так или только у меня? Если у всех, то что за дела.

type
 ESomeError = class(Exception);
...
 try
   if not ForceDirectories(edt_OutputDirName.Text) then begin
     Raise ESomeError.Create('Не удалось создать каталог ' + edt_OutputDirName.Text);
   end;
...
 except
   on E: ESomeError do Application.MessageBox(PChar(E.Message), 'Сообщение.', MB_ICONSTOP or MB_OK or MB_SYSTEMMODAL);
 end;

При выполнении ForceDirectories с edt_OutputDirName.Text := , например, 'qwerty' происходит Exception, при этом, соответственно, мы не попадаем на возбуждение, а так же пропускается блок except.

В чем дело? Кто-нибудь знает?


Andy BitOff_   (2008-10-28 20:06:00) [1]

> Anatoly Podgoretsky ©   (28.10.08 19:09) [4]

Да, чего-то стормозил, видимо отключена отладка модулей. В общем ступил.


Anatoly Podgoretsky   (2008-10-28 19:09:00) [2]

> Andy BitOff  (28.10.2008 17:16:00)  [0]

Есть же отладчик.


han_malign   (2008-10-28 18:05:00) [3]

function ForceDirectories(Dir: string): Boolean;
var
 E: EInOutError;
begin
 Result := True;
  if Dir = '' then
 begin
   E := EInOutError.CreateRes(@SCannotCreateDir);
   E.ErrorCode := 3;
   raise E;
 end;

 Dir := ExcludeTrailingPathDelimiter(Dir);
{$IFDEF MSWINDOWS}
 if (Length(Dir) < 3) or DirectoryExists(Dir)
   or (ExtractFilePath(Dir) = Dir) then Exit; // avoid 'xyz:\' problem.
{$ENDIF}
{$IFDEF LINUX}
 if (Dir = '') or DirectoryExists(Dir) then Exit;
{$ENDIF}
 Result := ForceDirectories(ExtractFilePath(Dir)) and CreateDir(Dir);
end;


Andy BitOff_   (2008-10-28 17:47:00) [4]

Ну то что мы не возбудились, это-то я и сам понимаю ;)
Однако по логике не может ForceDirectories вернуть True при ForceDirectories('qwerty'), да и не возвращает потому, что вылазит не мой Exception. Т.е. Exception вылазит, но не этот; on E: ESomeError

P.S.
Чего-то в DMClient'е слетел пароль, а так его не помню. Так что буду пока Andy BitOff_


Сергей М.   (2008-10-28 17:24:00) [5]


> мы не попадаем на возбуждение


Значит мы не возбудились - ForceDirectories вернула True.
Вот такие вот дела.


Наверх

Титульная страница Поиск, карта сайта Написать письмо