package tttDossier;
use strict;
use warnings;
use diagnostics;
use utf8;
use Exporter;
our @EXPORT = qw(&tttArborescence);
our @ISA = qw(Exporter);
use Cwd 'abs_path'; # pour reconstituer le chemin absolu d'un fichier
use File::Spec; # pour écrire des chemins correctement dans tous les systèmes
use utile;
use erreur;
#------Définition fonction
sub tttArborescence {
# lance un traitement sur tous fichiers compris dans l'arborescence du dossier en entrée. On peut spécifier une liste d'extensions pour filtrer les fichiers à traiter.
# entrée : dossier/fichier
# traitement : [nomFonction,param1,param2...]
# extensions : ext1,ext2... (facultatif)
# la fonction passée en paramètre pour la traitement des fichiers doit avoit le fichier input comme premier argument
my ($file,$traitement,@extensions) = @_;
$file = abs_path($file);
if (-f $file){ # si c'est un fichier avec une bonne extension
if ( (@extensions && utile::bonneExtension($file,@extensions) ) || !(@extensions) ){
# on lui applique le traitement
my ($fonction,@param)=@$traitement;
&$fonction($file,@param);
}
}elsif(-d $file){ # si c'est un dossier
opendir(DIR, $file) or erreur::affiche("ouvertureD",$file); # on l'ouvre
foreach my $subfile ( grep(!/^\.{1,2}/,readdir(DIR)) ){ # et chacun de ses elements
$subfile = File::Spec->catfile( $file,$subfile ); # est renommé en adresse absolue
tttArborescence($subfile,$traitement,@extensions); #et traité récursivement
}
closedir(DIR);
}
}