Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.48 MB
Время: 0.019 c
1-63250
DDA
2004-01-08 20:18
2004.01.20
Не восстанавливаемое удаление с диска


9-62951
dimodim
2003-06-23 13:44
2004.01.20
Где взять прогу для обЪединения и анимации 40 тайлов


3-63016
Аноним
2003-12-23 05:37
2004.01.20
Выпадающий список


14-63371
xman
2003-12-29 15:34
2004.01.20
ГЛЮК


14-63404
VictorT
2003-12-26 14:57
2004.01.20
Надежда умирает последней




   Наверх