OVH Cloud OVH Cloud

Attribut de fichier

5 réponses
Avatar
ECCO
Bonjour,

a) Connaissez vous un moyen simple de modifier les attribut d'un fichier (je
veux effacer le flag de RO).
(évidement system ("attrib -r $monfichier"); marche surement mais
apperler le system est couteux en temps)



b) avec la fonction File::Copy::copy, peut on copier un fichier SANS en
copier les attributs ?

5 réponses

Avatar
Paul Gaborit
À (at) Thu, 21 Jul 2005 13:21:27 +0200,
"ECCO" écrivait (wrote):
a) Connaissez vous un moyen simple de modifier les attribut d'un fichier (je
veux effacer le flag de RO).
(évidement system ("attrib -r $monfichier"); marche surement mais
apperler le system est couteux en temps)


C'est quoi cette commande 'attrib' ? Sous quel système ? (*)

En Perl, la fonction qui semble la plus proche de ce que vous cherchez
est 'chmod'.

perldoc -f chmod

ou (en français) :

<http://perl.enstimac.fr/DocFr/perlfunc.html#item_chmod>

b) avec la fonction File::Copy::copy, peut on copier un fichier SANS en
copier les attributs ?


C'est déjà ce que fait 'copy'. Pour une copie avec préservation
d'attributs, il faut utiliser 'syscopy'.

Sinon, la notion d'attributs est fortement liée à celle de système de
fichiers. Et le type de système de fichiers utilisés est souvent lié à
l'OS utilisé. Vous pouvez donc chercher dans les modules spécifiques à
votre système...

(*) J'ai volontairement cassé ma boule de cristal...

--
Paul Gaborit - <http://perso.enstimac.fr/~gaborit/>
Perl en français - <http://perl.enstimac.fr/>

Avatar
ECCO
C'est quoi cette commande 'attrib' ? Sous quel système ? (*)


sous DOS ou WINDOWS, attrib change les attributs de fichiers

Et sous ce syteme, File::Copy::copy($_[0], $_[1]) recopie aussi les
attributs de fichiers... mais apres ca: $File::Copy::Syscopy_is_copy = 0 ca
marche mieux.

Enfin, la bonne nouvelle c'est que CHMOD change les attributs de fichiers.

On a une fonction symétrique pour lire les attributs des fichiers ?



<http://perl.enstimac.fr/DocFr/perlfunc.html#item_chmod>
toujours tres utile cette doc, merci


Avatar
Paul Gaborit
À (at) Thu, 21 Jul 2005 15:16:57 +0200,
"ECCO" écrivait (wrote):
C'est quoi cette commande 'attrib' ? Sous quel système ? (*)


sous DOS ou WINDOWS, attrib change les attributs de fichiers


Merci de le préciser... De mon côté, je (re)précise que j'ai
*volontairement* cassé ma boule de cristal ;-)

Et sous ce syteme, File::Copy::copy($_[0], $_[1]) recopie aussi les
attributs de fichiers... mais apres ca: $File::Copy::Syscopy_is_copy = 0 ca
marche mieux.


Certes mais vous passez par un moyen non documenté par le module
File::Copy. Dans une prochaine version de ce module cette variable
sera peut-être une constante... ou aura peut-être carrément
disparue. Mieux vaut faire appelle directement à Win32::CopyFile après
avoir lu la doc correspondante :

perldoc Win32::CopyFile

(je ne crois pas qu'il existe de traduction française de la doc de ce
module...)

Enfin, la bonne nouvelle c'est que CHMOD change les attributs de fichiers.


C'est fait pour... Lisez tout de même les limitations de 'chmod' liées
à votre système dans perlport :

perldoc perlport

ou (en français) :

<http://perl.enstimac.fr/DocFr/perlport.html#liste%20alphab%E9tique%20des%20fonctions%20perl>

On a une fonction symétrique pour lire les attributs des fichiers ?


Ce n'est pas une fonction mais un ensemble de tests ou d'opérateurs
(en fait je ne sais pas vraiment comment nommer cette syntaxe un peu
particulière héritée des shells):

perldoc -f -X

ou (en français) :

<http://perl.enstimac.fr/DocFr/perlfunc.html#item_%2DX>

<http://perl.enstimac.fr/DocFr/perlfunc.html#item_chmod>
toujours tres utile cette doc, merci



C'était juste un peu plus haut (bon d'accord c'est un gros
morceau...).

--
Paul Gaborit - <http://perso.enstimac.fr/~gaborit/>
Perl en français - <http://perl.enstimac.fr/>


Avatar
jl_morel
Dans l'article , a dit...


Et sous ce syteme, File::Copy::copy($_[0], $_[1]) recopie aussi les
attributs de fichiers... mais apres ca: $File::Copy::Syscopy_is_copy = 0 ca
marche mieux.


Certes mais vous passez par un moyen non documenté par le module
File::Copy. Dans une prochaine version de ce module cette variable
sera peut-être une constante... ou aura peut-être carrément
disparue. Mieux vaut faire appelle directement à Win32::CopyFile après
avoir lu la doc correspondante :

perldoc Win32::CopyFile

(je ne crois pas qu'il existe de traduction française de la doc de ce
module...)



Si si :
http://www.bribes.org/perl/docfr/win32.html

Il est préférable d'utiliser File::Copy car il est portable et pour Windows
il définit syscopy par :

elsif ($^O eq 'MSWin32') {
*syscopy = sub {
return 0 unless @_ == 2;
return Win32::CopyFile(@_, 1);
};

donc ça revient au même.

Si on fait $File::Copy::Syscopy_is_copy = 0 alors la copie se fait par
l'intermédiaire d'un tampon auxiliaire et c'est beaucoup moins rapide.
La fonction CopyFile de l'API Windows recopie les attributs sauf les
attributs de sécurité :
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/fileio/fs/copyfile.asp
Il faut donc modifier les attributs après la copie.

Pour utiliser presque toutes les fonctions de l'API Windows sur les
fichiers il y a le module Win32API::File :
http://aspn.activestate.com/ASPN/docs/ActivePerl/5.8/site/lib/Win32API/File.html


Il y a aussi le module Win32::File pour lire et modifier les attributs
d'un fichier :
http://www.bribes.org/perl/docfr/win32file.html

--
J-L.M.
http://www.bribes.org/perl


Avatar
Paul Gaborit
À (at) 21 Jul 2005 15:22:25 GMT,
(Jean-Louis MOREL) écrivait (wrote):
Mieux vaut faire appelle directement à Win32::CopyFile après
avoir lu la doc correspondante :

perldoc Win32::CopyFile

(je ne crois pas qu'il existe de traduction française de la doc de ce
module...)



Si si :
http://www.bribes.org/perl/docfr/win32.html


Exact. Et pourtant j'avais cherché... mais je me suis laissé abuser
par le nom : je cherchais la doc d'un module alors que c'est une
fonction. Quelle idée aussi de commencer le nom d'une fonction par une
majuscule (même si elle est [CORE]) !

[... plein d'explications précises sur les spécificités Windows...]


Merci pour ces détails.

--
Paul Gaborit - <http://perso.enstimac.fr/~gaborit/>
Perl en français - <http://perl.enstimac.fr/>