Форум: "Основная";
Текущий архив: 2004.01.20;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.009 c