Вниз
Скачать: 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.016 c
14-63406
Артём Запаранюк
2003-12-27 16:11
2004.01.20
Обязательно ли хороший программист об. быть хорошим шахматистом


1-63086
race1
2004-01-08 15:42
2004.01.20
прилипающие плавающие окошки


3-63037
Роберт
2003-12-24 20:38
2004.01.20
как применить Sql запрос к нескольким строчкам


4-63457
Jampir
2003-11-16 20:32
2004.01.20
получение цвета точки рабочего стола


1-63190
ИМХО
2004-01-06 18:27
2004.01.20
По поводу Application.ProcessMessages




   Наверх