Re: Open / Create

Jean-Pierre Rosen <[email protected]> Tue, 2 Jun 2020 11:37:28 +0200
Newsgroups gmane.comp.lang.ada.france
Message-ID <[email protected]>
Le 30/05/2020 à 22:17, Thomas De Contes a écrit :

>>   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
> 
> la combinaison de Append et de Overwrite_Option, c'est un peu curieux
Je pense (c'était il y a longtemps) que cela correspond au fait que j'ai
une option -w pour forcer l'écrasement, donc on passe le flag
indépendamment de ce qui est demandé à côté.
> 
> moi j'aurais fait quelque chose du genre
>   type Open_Mode is (Create, Append, Overwrite);
Oui, à chacun d'arranger la sauce à son goût...


>>         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;
> 
> pourquoi ne simplifies tu pas en
> 
>            Open (File, Append_File, Name);
>            case Mode is
>               when Create =>
>                  -- File exists
>                  Close (File);
>                  raise Overwrite_Error;
>               when Append =>
>                  -- OK if file exists
>            end case;
Oui, je devais penser qu'Append_File n'exigeait pas que le fichier
existe, mais apparemment ce n'est pas le cas.

> n'as tu pas peur que "Open (File, Out_File, Name);" te vide le fichier existant ?
> ou alors c'est ce que tu souhaites ?
Je viens de m'apercevoir que je n'utilise ça qu'à un endroit, et pas
avec cette combinaison de paramètres. J'aurais peut-être dû faire plus
attention avant de répondre...

>>
>>         exception
>>            when Name_Error =>
>>               -- File does not exist (either mode)
>>               Create (File, Out_File, Name);
>>         end;
> 
> 
>>> - créer le fichier s'il n'existe pas,
>>> - écrire à la suite, sans effacer le contenu, s'il existe
> 
> si je comprends bien, tu me suggères de faire
>         begin
>            Open (File, Append_File, Name);
>         exception
>            when Name_Error =>
>               -- File does not exist
>               Create (File, Out_File, Name);
>         end;
> 
> plutôt que
>          if Ada.Directories.Exists( Name ) then
>             Open (File, Append_File, Name);
>          else
>             Create (File, Out_File, Name);
>          end if; 
> ?
> 
> est ce que, quand on fait des appels fréquents comme pour un log de debug, l'un des 2 est plus couteux que l'autre ?
En principe, les Open sont rares, donc ce n'est pas la peine de chercher
à optimiser.

> est ce que c'est simplement pour éviter un "with Ada.Directories;" ?
Honnètement, ce code date d'avant Ada.Directories.

> c'est bizarre,
> comparant :
> http://www.ada-auth.org/standards/rm12_w_tc1/html/RM-A-10-1.html
> http://www.ada-auth.org/standards/rm12_w_tc1/html/RM-A-12-1.html
> on dirait que le A.10.1 a été tronqué !
> 
En fait, Stream_IO se rapproche plus d'un Direct_IO sur des
Stream_Elements que de Text_IO.

-- 
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