Re: Open / Create
Jean-Pierre Rosen <[email protected]> Sat, 30 May 2020 07:18:27 +0200
| Newsgroups | gmane.comp.lang.ada.france |
|---|---|
| Message-ID | <[email protected]> |
Le 30/05/2020 à 04:30, Thomas De Contes a écrit :
> Bonjour :-)
>
>
> idéalement, j'aurais aimé économiser une condition sur l'existence du fichier, en écrivant sur une seule ligne de quoi :
Tu peux écrire tout ce que tu veux sur une seule ligne: il suffit d'en
faire une procédure...
Perso, j'ai la petite procédure suivante, ça fait des dizaines d'années
que je l'utilise:
type Open_Mode is (Create, Append);
-- Create: the file must not exist, unless Overwrite_Option
-- Append: if the file exists, it is appended to, unless Overwrite_Option
-- Failure of the existence condition raises Overwrite_Error
Overwrite_Error : exception;
procedure Safe_Open (File : in out Ada.Wide_Text_IO.File_Type;
Name : String;
Mode : Open_Mode;
Overwrite_Option : Boolean);
procedure Safe_Open (File : in out Ada.Wide_Text_IO.File_Type;
Name : String;
Mode : Open_Mode;
Overwrite_Option : Boolean)
is
use Ada.Wide_Text_IO;
begin
if Overwrite_Option then
Create (File, Out_File, Name);
else
begin
case Mode is
when Create =>
Open (File, Out_File, Name);
-- File exists
Close (File);
raise Overwrite_Error;
when Append =>
Open (File, Append_File, Name);
-- OK if file exists
end case;
exception
when Name_Error =>
-- File does not exist (either mode)
Create (File, Out_File, Name);
end;
end if;
exception
when Occur : others =>
declare
use Ada.Exceptions;
begin
Raise_Exception (Exception_Identity (Occur),
Message => "Error opening "
& Name
& " for "
& Open_Mode'Image (Mode));
end;
end Safe_Open;
(NB: Ca utilise Wide_Text_IO parceque tout ASIS utilise des
Wide_Character; tu peux évidemment le changer en Text_IO)
> - créer le fichier s'il n'existe pas,
> - écrire à la suite, sans effacer le contenu, s'il existe
>
> si je n'ai pas fait d'erreur,
> Ada.Sequential_IO.Open permet de créer un fichier,
> mais pas Ada.Text_IO.Open ni Ada.Streams.Stream_IO.Open ?
Non, tous les Open marchent pareil (il n'y a qu'une seule description
dans le manuel)
> je ne vois toujours pas l'utilité de Create (... Append_File ...), puisque c'est l'équivalent de Create (... Out_File ...)
> (donc ça ne peut pas se rendre utile dans mon cas)
Disons que c'est là parcequ'on ne l'a pas interdit, ça ne fait aucun mal.
--
J-P. Rosen
Adalog
2 rue du Docteur Lombard, 92441 Issy-les-Moulineaux CEDEX
Tel: +33 1 45 29 21 52, Fax: +33 1 45 29 25 00
http://www.adalog.fr
_______________________________________________
Ada-france mailing list
[email protected]
https://mail.ada-france.org/cgi-bin/mailman/listinfo/ada-france