j'ai fait un petit code en perl, mais je suis débutant, et j'avoue que
là, je ne vois pas réellement d'où viens le probleme.
Je souhaite parcourir tous les fichiers et dossiers a aprtir d'un
dossier "root"; mon code utilisae la récursivité, mais il semble
s'arrêter dès qu'il trouve un dossier.
voici mon code :
sub getListOfLocalFiles {
my ($directory, $spacer) = @_;
my $client = shift;
my $size = shift;
## la ligne ci-dessous est mon deuxième probleme...
if (!($directory =~ m/^\w:/)) {
$directory = $client->{profilesRoot};
}
if (!$spacer) {
$spacer = " ";
}
opendir (DIR, $directory) || die ("Error Opening Directory
".$directory);
my @files = readdir(DIR);
foreach my $file (@files) {
if ($file ne "." && $file ne "..") {
if (-f $directory."\\".$file) {
$size = -s $directory."\\".$file;
printf ($spacer." %s \t".$size."\n",$file);
} elsif (-d $directory."\\".$file) {
printf ($spacer."+ %s \n",$file);
getListOfLocalFiles($directory .= "\\".$file, $spacer .= "
");
}
}
}
}
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
jl_morel
Dans l'article , a dit...
Je souhaite parcourir tous les fichiers et dossiers a aprtir d'un dossier "root"; mon code utilisae la récursivité, mais il semble s'arrêter dès qu'il trouve un dossier.
voici mon code :
sub getListOfLocalFiles { my ($directory, $spacer) = @_; my $client = shift; my $size = shift; ## la ligne ci-dessous est mon deuxième probleme... if (!($directory =~ m/^w:/)) { $directory = $client->{profilesRoot}; } if (!$spacer) { $spacer = " "; } opendir (DIR, $directory) || die ("Error Opening Directory ".$directory); my @files = readdir(DIR); foreach my $file (@files) { if ($file ne "." && $file ne "..") { if (-f $directory."".$file) { $size = -s $directory."".$file; printf ($spacer." %s t".$size."n",$file); } elsif (-d $directory."".$file) { printf ($spacer."+ %s n",$file); getListOfLocalFiles($directory .= "".$file, $spacer .= " "); } } } }
Pouvez vous m'éclairir sur mon probleme ?
L'appel récursif est très curieux. Pourquoi getListOfLocalFiles($directory .= "".$file, $spacer .= " "); ?? Il faut plutôt getListOfLocalFiles($directory . "".$file, $spacer . " "); sinon vous modifiez la variable $directory de l'appelant et au retour les fichiers ne sont plus reconnus par les tests.
D'autre part, quand on ouvre un répertoire il est prudent de le refermer quand on n'en a plus besoin :
opendir (DIR, $directory) || die ("Error Opening Directory".$directory); my @files = readdir(DIR); close DIR;
Enfin, pourquoi ne pas utiliser le module File::Find ? C'est un module standard qui permet de parcourir un répertoire et ses sous- répertoires. Il est itératif et non récursif, donc plus rapide et moins gourmand en espace mémoire.
HTH
-- J-L.M.
Dans l'article <8d71e697.0404182252.57d14654@posting.google.com>,
ernond_paul@yahoo.fr a dit...
Je souhaite parcourir tous les fichiers et dossiers a aprtir d'un
dossier "root"; mon code utilisae la récursivité, mais il semble
s'arrêter dès qu'il trouve un dossier.
voici mon code :
sub getListOfLocalFiles {
my ($directory, $spacer) = @_;
my $client = shift;
my $size = shift;
## la ligne ci-dessous est mon deuxième probleme...
if (!($directory =~ m/^w:/)) {
$directory = $client->{profilesRoot};
}
if (!$spacer) {
$spacer = " ";
}
opendir (DIR, $directory) || die ("Error Opening Directory
".$directory);
my @files = readdir(DIR);
foreach my $file (@files) {
if ($file ne "." && $file ne "..") {
if (-f $directory."\".$file) {
$size = -s $directory."\".$file;
printf ($spacer." %s t".$size."n",$file);
} elsif (-d $directory."\".$file) {
printf ($spacer."+ %s n",$file);
getListOfLocalFiles($directory .= "\".$file, $spacer .= "
");
}
}
}
}
Pouvez vous m'éclairir sur mon probleme ?
L'appel récursif est très curieux. Pourquoi
getListOfLocalFiles($directory .= "\".$file, $spacer .= " "); ??
Il faut plutôt
getListOfLocalFiles($directory . "\".$file, $spacer . " ");
sinon vous modifiez la variable $directory de l'appelant et au retour
les fichiers ne sont plus reconnus par les tests.
D'autre part, quand on ouvre un répertoire il est prudent de le refermer
quand on n'en a plus besoin :
opendir (DIR, $directory) || die ("Error Opening Directory".$directory);
my @files = readdir(DIR);
close DIR;
Enfin, pourquoi ne pas utiliser le module File::Find ?
C'est un module standard qui permet de parcourir un répertoire et ses sous-
répertoires. Il est itératif et non récursif, donc plus rapide et moins
gourmand en espace mémoire.
Je souhaite parcourir tous les fichiers et dossiers a aprtir d'un dossier "root"; mon code utilisae la récursivité, mais il semble s'arrêter dès qu'il trouve un dossier.
voici mon code :
sub getListOfLocalFiles { my ($directory, $spacer) = @_; my $client = shift; my $size = shift; ## la ligne ci-dessous est mon deuxième probleme... if (!($directory =~ m/^w:/)) { $directory = $client->{profilesRoot}; } if (!$spacer) { $spacer = " "; } opendir (DIR, $directory) || die ("Error Opening Directory ".$directory); my @files = readdir(DIR); foreach my $file (@files) { if ($file ne "." && $file ne "..") { if (-f $directory."".$file) { $size = -s $directory."".$file; printf ($spacer." %s t".$size."n",$file); } elsif (-d $directory."".$file) { printf ($spacer."+ %s n",$file); getListOfLocalFiles($directory .= "".$file, $spacer .= " "); } } } }
Pouvez vous m'éclairir sur mon probleme ?
L'appel récursif est très curieux. Pourquoi getListOfLocalFiles($directory .= "".$file, $spacer .= " "); ?? Il faut plutôt getListOfLocalFiles($directory . "".$file, $spacer . " "); sinon vous modifiez la variable $directory de l'appelant et au retour les fichiers ne sont plus reconnus par les tests.
D'autre part, quand on ouvre un répertoire il est prudent de le refermer quand on n'en a plus besoin :
opendir (DIR, $directory) || die ("Error Opening Directory".$directory); my @files = readdir(DIR); close DIR;
Enfin, pourquoi ne pas utiliser le module File::Find ? C'est un module standard qui permet de parcourir un répertoire et ses sous- répertoires. Il est itératif et non récursif, donc plus rapide et moins gourmand en espace mémoire.
HTH
-- J-L.M.
ernond_paul
L'appel récursif est très curieux. Pourquoi getListOfLocalFiles($directory .= "".$file, $spacer .= " "); ?? Il faut plutôt getListOfLocalFiles($directory . "".$file, $spacer . " "); sinon vous modifiez la variable $directory de l'appelant et au retour les fichiers ne sont plus reconnus par les tests.
oups, ben évidemment que ca marche mieux...
D'autre part, quand on ouvre un répertoire il est prudent de le refermer quand on n'en a plus besoin :
opendir (DIR, $directory) || die ("Error Opening Directory".$directory); my @files = readdir(DIR); close DIR;
oui, ok
Enfin, pourquoi ne pas utiliser le module File::Find ? C'est un module standard qui permet de parcourir un répertoire et ses sous- répertoires. Il est itératif et non récursif, donc plus rapide et moins gourmand en espace mémoire.
peut etre parce que je souhaite réinventer la roue.... non je suis débutant je connaissait pas File::Find mais je vais m'y pencher.
Merci beaucoup.
L'appel récursif est très curieux. Pourquoi
getListOfLocalFiles($directory .= "\".$file, $spacer .= " "); ??
Il faut plutôt
getListOfLocalFiles($directory . "\".$file, $spacer . " ");
sinon vous modifiez la variable $directory de l'appelant et au retour
les fichiers ne sont plus reconnus par les tests.
oups, ben évidemment que ca marche mieux...
D'autre part, quand on ouvre un répertoire il est prudent de le refermer
quand on n'en a plus besoin :
opendir (DIR, $directory) || die ("Error Opening Directory".$directory);
my @files = readdir(DIR);
close DIR;
oui, ok
Enfin, pourquoi ne pas utiliser le module File::Find ?
C'est un module standard qui permet de parcourir un répertoire et ses sous-
répertoires. Il est itératif et non récursif, donc plus rapide et moins
gourmand en espace mémoire.
peut etre parce que je souhaite réinventer la roue.... non je suis
débutant je connaissait pas File::Find mais je vais m'y pencher.
L'appel récursif est très curieux. Pourquoi getListOfLocalFiles($directory .= "".$file, $spacer .= " "); ?? Il faut plutôt getListOfLocalFiles($directory . "".$file, $spacer . " "); sinon vous modifiez la variable $directory de l'appelant et au retour les fichiers ne sont plus reconnus par les tests.
oups, ben évidemment que ca marche mieux...
D'autre part, quand on ouvre un répertoire il est prudent de le refermer quand on n'en a plus besoin :
opendir (DIR, $directory) || die ("Error Opening Directory".$directory); my @files = readdir(DIR); close DIR;
oui, ok
Enfin, pourquoi ne pas utiliser le module File::Find ? C'est un module standard qui permet de parcourir un répertoire et ses sous- répertoires. Il est itératif et non récursif, donc plus rapide et moins gourmand en espace mémoire.
peut etre parce que je souhaite réinventer la roue.... non je suis débutant je connaissait pas File::Find mais je vais m'y pencher.