Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.01.20;
Скачать: CL | DM;

Вниз

try except   Найти похожие ветки 

 
Ega23 ©   (2004-01-08 15:49) [0]

procedure SaveTPL(const FileName:String);
var
Ini:TIniFile;
begin
try
Ini:=TIniFile.Create(FileName);
......
Ini.WriteInteger(....);
.....
except
ShowMessage("Error!");
end;
end;

На Ini.WriteInteger(....) происходит ошибка.
Нужно ли в секции except ставить Ini.Free?
Или сам "убъётся"?


 
MBo ©   (2004-01-08 15:51) [1]

Ini.Free нужно ставить в Finally


 
Тимохов ©   (2004-01-08 15:51) [2]

Обязательно нужно!


 
Тимохов ©   (2004-01-08 15:52) [3]

Пардон.
[1] конечно прав, а я что-то сморозил.


 
panov ©   (2004-01-08 15:55) [4]

procedure SaveTPL(const FileName:String);
var
Ini:TIniFile;
begin
try
Ini:=TIniFile.Create(FileName);
except
ShowMessage("Error!");
Exit;
end;
try
......
Ini.WriteInteger(....);
.....
finaly
ini.free;
end;
end;


 
Ega23 ©   (2004-01-08 15:55) [5]

Угу, понятно. Спасибо.


 
Ega23 ©   (2004-01-08 15:57) [6]


> panov © (08.01.04 15:55) [4]

Не,
Ini:=TIniFile.Create(FileName) - тут ошибки быть не может, это до входа в процедуру проверяется. Файл создан, ошибка произошла во время записи в него.


 
panov ©   (2004-01-08 16:01) [7]

>Ega23 © (08.01.04 15:57) [6]
Ini:=TIniFile.Create(FileName) - тут ошибки быть не может, это до входа в процедуру проверяется. Файл создан, ошибка произошла во время записи в него.

Все равно проверяй, ведь процедура может вызываться из нескольких мест. И что, каждый раз будешь проверять до вызова процедуры?


 
Ega23 ©   (2004-01-08 16:02) [8]


> Все равно проверяй, ведь процедура может вызываться из нескольких
> мест. И что, каждый раз будешь проверять до вызова процедуры?

Не, это, фактически, action.
Но идея понятна, спасибо.


 
MV   (2004-01-08 16:11) [9]

procedure SaveTPL(const FileName:String);
var
Ini:TIniFile;
begin
Ini:=TIniFile.Create(FileName);
try

try
......
Ini.WriteInteger(....);
.....
except
ShowMessage("Error!");
end;
finally
Ini.Free
end;
end;
На Ini.WriteInteger(....) происходит ошибка.
Нужно ли в секции except ставить Ini.Free?
Или сам "убъётся"?


 
Daemys ©   (2004-01-08 17:10) [10]

Ini:=TIniFile.Create(FileName) - тут ошибки быть не может

Может, но при возникновении исключения в конструкторе объекта, его деструктор вызывается автоматически, поэтому try всегда пишется после создания объекта, а вот Free надо обязательно вызывать в finally. При это желательно, чтобы одному объекту соответствовал один блок try..except


 
panov ©   (2004-01-08 17:11) [11]

>MV (08.01.04 16:11) [9]

Ставить в
except..end не надо, так как у тебя освобождение выполнится в секции finally..end


 
MV   (2004-01-08 17:12) [12]

Ставить в
except..end не надо, так как у тебя освобождение выполнится в секции finally..end


А ошибки чем обрабатывать?


 
Ega23 ©   (2004-01-08 17:14) [13]


> panov © (08.01.04 17:11) [11]

А разве конструкция
try
.....
except
.....
finally
.....
end;
допускается?


 
MV   (2004-01-08 17:17) [14]

Нет. Повторяю по разделениям:
try
try
......
Ini.WriteInteger(....);
.....
except
ShowMessage("Error!");
end;
finally
Ini.Free
end;


 
Ega23 ©   (2004-01-08 17:19) [15]


> MV (08.01.04 17:17) [14]

Это я понял, сам дошёл ;-)
Просто жаль, что на каждый блок except или finally свой try должен быть.


 
MV   (2004-01-08 17:21) [16]

Что имеем, то имеем.



Страницы: 1 вся ветка

Текущий архив: 2004.01.20;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.031 c
3-63019
Trad
2003-12-22 06:47
2004.01.20
прямая запись в БД


1-63181
DDA
2004-01-10 13:09
2004.01.20
Определение какая нажата кнопка


11-63048
Юрий
2003-05-04 18:43
2004.01.20
TKolRichEdit и TKolListBox


1-63160
Mozart
2003-12-27 08:44
2004.01.20
пара ввопросов по работе с файлами


4-63440
tower
2003-11-14 10:23
2004.01.20
Отследить команду