Re: Ada.Text_IO - Fichier temporaire
Thomas De Contes via Ada-france <[email protected]> Wed, 12 Jan 2022 19:35:03 +0100
| Newsgroups | gmane.comp.lang.ada.france |
|---|---|
| Message-ID | <[email protected]> |
Le 10 janv. 2022 à 09:54, Jean-Pierre Rosen a écrit :
> Le 09/01/2022 à 23:54, Thomas De Contes a écrit :
>> À mon humble avis, ça serais mieux de le clarifier et compléter en disant par exemple :
>> "A null string for Name specifies an external file that is not accessible after a call to Close (File) or the completion of the main program".
>>
>> De cette maniere, ça me paraitrais plus clair que, après un Close, même si le programme continue, et même si la variable utilisée pour faire ce fichier temporaire continue d'exister, le fichier temporaire n'existe plus.
>
> Pour faire une règle de langage,
Qu'est-ce que c'est précisément ?
Est-ce que ça veut dire que :
>>> Ca crée un fichier temporaire (effacé automatiquement au Close)
c'est ton interprétation ainsi que celle de GNAT, mais qu'un autre compilateur pourrais l'interpréter autrement ?
> il faut pouvoir disposer d'un test pour savoir si la règle est respectée ou non. Comment ferais-tu un test pour ce que tu proposes?
Si j'ai bien compris la question, tu me demandes de chercher exhaustivement tous les moyens de relire le contenu d'un fichier temporaire après l'avoir fermé, et constater qu'on n'y arrive pas ?
Il me semble en avoir fait le tour :
Après avoir créé un fichier temporaire, avoir écrit quelque chose dedans, et l'avoir refermé :
1)
Open (File, In_File, "")
lève Name_Error.
2)
Create (File, In_File, "")
- Si avec un fichier ordinaire c'est censé lever une exception ou lire un fichier vide,
a le même comportement.
- Si avec un fichier ordinaire c'est censé agir comme un Open,
lit un fichier vide.
3)
Create (File, Append_File, "")
Reset (File, In_File)
lit un fichier vide (important pour les compilateurs qui choisissent de suivre le Append_File avec Create).
Puisque la doc ne précise pas explicitement que le fichier temporaire disparaît au Close,
alors il est permis de supposer que 2) (s'il ne lève pas d'exception) et 3) permettent de le relire.
Pendant que j'y suis, il me semble que ça serais utile aussi de préciser si :
Create (File1, Out_File, "")
Create (File2, Out_File, "")
fait 2 fichiers temporaires simultanés, ou si le 2ème lève la même exception qu'avec les fichiers ordinaires.
D'ailleurs il y a quelque chose qui n'est pas parfaitement clair :
Il me semble que Status_Error est levée si on utilise mal une variable File_Type ("the given file is already open").
Mais si c'est le fichier externe qu'on essaye d'ouvrir une 2ème fois, c'est Use_Error qui est levée, c'est bien ça ?
>>>> Est-ce que, en combinaison avec Name ("function Name (File : in File_Type) return String;") ça permet d'obtenir un répertoire pour fichiers temporaires,
>>> Non,
>>> il n'y a pas nécessairement de répertoire associé (i.e. dans les systèmes bien faits, on a la notion de fichier temporaire - c'est parcequ'on n'a pas cette notion dans le système qu'Unix/DOS utilise /tmp ou équivalent).
En relisant la doc :
"The exception Use_Error is propagated if the associated external file is a temporary file that cannot be opened by any name."
ça laisse penser que si c'est un fichier temporaire mais qu'il a un nom, ça peut marcher.
(Finalement pour moi, même si ça marche j'aime autant ne pas réduire la portabilité, mais ça peut être intéressant pour ceux qui en auraient besoin.)
--
RAPID maintainer
http://savannah.nongnu.org/projects/rapid/
_______________________________________________
Ada-france mailing list
[email protected]
https://mail.ada-france.org/cgi-bin/mailman/listinfo/ada-france