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