From: Preben Randhol <randhol+abuse@pvv.org>
Subject: Re: I/O - exception handling
Date: Mon, 26 May 2003 16:57:14 +0000 (UTC)
Date: 2003-05-26T16:57:14+00:00 [thread overview]
Message-ID: <slrnbd4hqk.2hh.randhol+abuse@kiuk0152.chembio.ntnu.no> (raw)
In-Reply-To: bat8vn$48r$1@ns.felk.cvut.cz
Sergey Koshcheyev wrote:
>
> OK, I'll try to explain my problem on your example. You report the error.
> Then, where do you close the file you're reading from?
> - If you close it inside the exception block, you leak the file, since it
> will not be closed on errors.
> - If you close it outside the exception block, then the problem is that
> Close can raise an exception too, and the code gets uglier.
> - If you close it while handling exceptions, the exception you're handling
> might have occured while opening the file, and closing a non-open file will
> cause another exception.
>
> So, are there any other possibilites, or which of these three is generally
> considered the best?
OK understand. *I* would then do:
procedure Safe_Close (File : File_Type)
is
begin
if Is_Open (File) then
begin
Close (File);
exception
-- Close can raise exceptions too!
when others => null;
end;
end if;
end Safe_Close;
procedure One_Of_Your_Procedures_That_Open_Files
is
begin
Open (File, Name => "test.txt", Mode => In_File);
Get_Line (File, S1);
Get_Line (File, S2);
Safe_Close (File);
exception
when others =>
Safe_Close (File);
end Read_Something;
Now you can use the Safe_Close in any function you like.
--
Preben Randhol http://www.pvv.org/~randhol/
next prev parent reply other threads:[~2003-05-26 16:57 UTC|newest]
Thread overview: 56+ messages / expand[flat|nested] mbox.gz Atom feed top
2003-05-26 13:05 I/O - exception handling Sergey Koshcheyev
2003-05-26 13:33 ` Preben Randhol
2003-05-26 14:11 ` Sergey Koshcheyev
2003-05-26 14:29 ` Preben Randhol
2003-05-26 14:31 ` Preben Randhol
2003-05-26 14:39 ` Sergey Koshcheyev
2003-05-26 16:57 ` Preben Randhol [this message]
2003-05-26 17:48 ` Sergey Koshcheyev
2003-05-26 18:08 ` Preben Randhol
2003-05-26 18:48 ` Sergey Koshcheyev
2003-05-27 1:24 ` Hyman Rosen
2003-05-27 2:20 ` Larry Kilgallen
2003-05-27 2:38 ` Hyman Rosen
2003-05-27 16:17 ` Warren W. Gay VE3WWG
2003-05-27 19:40 ` Hyman Rosen
2003-05-27 20:18 ` Warren W. Gay VE3WWG
2003-05-27 10:31 ` Larry Kilgallen
2003-05-27 21:43 ` Hyman Rosen
2003-05-27 5:33 ` Robert I. Eachus
2003-05-27 13:53 ` Preben Randhol
2003-05-27 12:01 ` Lutz Donnerhacke
2003-05-26 14:12 ` Simon Wright
2003-05-26 14:24 ` Preben Randhol
2003-05-26 14:52 ` Jean-Pierre Rosen
2003-05-26 15:26 ` Sergey Koshcheyev
2003-05-26 15:45 ` Hyman Rosen
2003-05-26 16:25 ` Sergey Koshcheyev
2003-05-27 1:35 ` Hyman Rosen
2003-05-28 21:47 ` Robert A Duff
2003-05-26 16:31 ` Steve
2003-05-27 2:36 ` Anisimkov
2003-05-27 7:21 ` Sergey Koshcheyev
2003-05-27 13:47 ` Preben Randhol
2003-05-27 19:01 ` Sergey Koshcheyev
2003-05-27 16:50 ` Dmitriy Anisimkov
2003-05-27 18:11 ` Ludovic Brenta
2003-05-28 1:27 ` Jeffrey Carter
2003-05-28 7:33 ` Sergey Koshcheyev
2003-05-28 9:08 ` Preben Randhol
2003-05-28 18:07 ` Randy Brukardt
2003-05-28 22:51 ` Robert I. Eachus
2003-05-29 2:03 ` Jeffrey Carter
2003-05-29 8:39 ` Manuel Collado
2003-05-30 6:56 ` Preben Randhol
2003-05-30 9:33 ` Larry Kilgallen
2003-05-30 11:13 ` Preben Randhol
2003-05-30 11:39 ` Larry Kilgallen
2003-05-30 11:41 ` Preben Randhol
2003-05-30 19:51 ` Randy Brukardt
2003-06-01 16:08 ` Robert I. Eachus
2003-06-03 0:18 ` Randy Brukardt
2003-06-03 4:16 ` Robert I. Eachus
[not found] ` <slrnbd6m69.vh.lutz@taranis.iks-jena.de>
2003-05-27 14:06 ` Preben Randhol
2003-05-27 15:59 ` Lutz Donnerhacke
2003-05-27 19:05 ` Sergey Koshcheyev
2003-05-27 19:32 ` Larry Kilgallen
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox