Re: Open / Create

Thomas De Contes <[email protected]> Sat, 30 May 2020 22:17:41 +0200
Newsgroups gmane.comp.lang.ada.france
Message-ID <[email protected]>
Le 30 mai 2020 à 07:18, Jean-Pierre Rosen a écrit :

> Le 30/05/2020 à 04:30, Thomas De Contes a écrit :
>> 
>> idéalement, j'aurais aimé économiser une condition sur l'existence du fichier, en écrivant sur une seule ligne de quoi :


>   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

moi j'aurais fait quelque chose du genre
  type Open_Mode is (Create, Append, Overwrite);


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

?

n'as tu pas peur que "Open (File, Out_File, Name);" te vide le fichier existant ?
ou alors c'est ce que tu souhaites ?

> 
>         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 ?
est ce que c'est simplement pour éviter un "with Ada.Directories;" ?


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

ok
(désolé, je me suis fié à du vieux code que je n'ai pas testé récemment, seulement relu)


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



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

quand il y a quelque chose qui me parait pas logique, ça m'agace que ça ne soit pas interdit, pour nous empêcher de faire des bêtises (puisqu'en principe c'est ça l'"esprit" d'ada)



merci pour toutes tes réponses :-)
(j'ai toujours des questions qui suivent, mais ça fait avancer :-) )


-- 
Téléassistance / Télémaintenance
http://invites.biocer.fr/thomas-de-contes/

_______________________________________________
Ada-france mailing list
[email protected]
https://mail.ada-france.org/cgi-bin/mailman/listinfo/ada-france