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

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

почуему в try...finally всегда срабатывает [D6, WinXP]


han ©   (2004-07-16 12:06:00) 

Есть код
 if not DeleteFile(FsIniFile) then
   raise Exception.Create(Format('Can not delete the file "%s"', [FsIniFile]));

 with TIniFile.Create(FsIniFile) do
   try
     FDBList.IniFileName := FsIniFile;
     FDBList.Section :='DB List';
     FDBLIST.StoreDst := sdINI;
     FDBList.Store;
   finally
     Free;
   end;

В условии if not DeleteFile(FsIniFile) срабатывает генерация исключительной ситуации, т. .е выполнение не должно дойти до блока try....
Но почему-то finally в этом блоке всеравно срабатывает. Объясните мне плиз почему?


Digitman   (2004-07-16 13:26:00) [1]


> Остановится на Free


раз остановился, значит строчка

raise Exception.Create(Format('Can not delete the file "%s"', [FsIniFile]));

не выполнена


han   (2004-07-16 13:05:00) [2]

от блин, странности... Остановится на Free остановился, но его он не отрабатывает... типа все правильно. Надо искать тогда причину в другом. Спасибо за объяснение.


Суслик   (2004-07-16 13:03:00) [3]


> han   (16.07.04 12:59) [7]

вопрос 1 из сообщения 6 чем не угодил?
Может ответишь.


han   (2004-07-16 12:59:00) [4]

тоже правильно... но все равно. Какая разница обращаюсь я к нему или нет?


Digitman   (2004-07-16 12:53:00) [5]


> han   (16.07.04 12:49) [5]


ответь на вопросы :

1. ты ставил брейкпойнт Free ? "Ловил" его ?
2. Где в коде между try и finally ты обращаешься к объекту класса TIniFile ?


han   (2004-07-16 12:49:00) [6]

что не все? это весь код процедуры

procedure TAppSettings.StoreToINI;
begin
 if not DeleteFile(FsIniFile) then
   raise Exception.Create(Format('Can not delete the file "%s"', [FsIniFile]));

 with TIniFile.Create(FsIniFile) do
   try
     FDBList.IniFileName := FsIniFile;
     FDBList.Section :='DB List';
     FDBLIST.StoreDst := sdINI;
     FDBList.Store;
   finally
     Free;
   end;
end;


Инопланетянин   (2004-07-16 12:40:00) [7]


> Но почему-то finally в этом блоке всеравно срабатывает


не срабатывает, смотри внимательнее.
Если ты пришел к такомы выводу, шагая отладчиком, то не верь глазам своми.
Поставь брекпоинт на Free и убедись, что там не остановишься


Digitman   (2004-07-16 12:24:00) [8]

что-то я не понял, для чего здесь with-конструкция ? где в ее теле идет обращение к экз-ру созданного объекта класса TIniFile ? кроме Free ?


Anatoly Podgoretsky   (2004-07-16 12:13:00) [9]

Значит не срабатывает if not DeleteFile(FsIniFile)или ты не все говоришь


Суслик   (2004-07-16 12:11:00) [10]

1 потому, что исключение не срабатывает
2 или ты не весь код привел


Наверх

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