J'ai un petit problème pour tester si un répertoire est vide.
Je sais que dans le programme ci-dessous $pcgg n'est pas vide alors que $val
l'est.
Je fais mon test sans filehandle et avec filehandle mais les deux cas
j'obtiens comme résultat que le répertoire est vide.
Je ne vois vraiment pas ou se situe mon erreur
$pcgg ="g:/Retrospect/pcgg/1-pcgg";
$val = "g:/Retrospect/dwin-g4-valette/1-dwin-g4-valette";
#test sans filehandle
if (-z $val) {print "val vide\n";} else {print "non vide\n";}
if (-z $pcgg) {print "pcgg vide\n";} else {print "non vide\n";}
#test sur un filehandle
opendir(FILE1, $val);
if( -z readdir(FILE1)) { print "val vide\n";}
else {print "val non vide\n";
}
close(FILE1);
pourquoi 2 dans le if? => parce qu'il y a tjs . et .. dans un répertoire :p
my $dir="d1";
if(-d $dir && opendir(DIR, $dir) && scalar(map($_, readdir(DIR)))==2) { print "empty$/"; } else { print "not empty or not a directory$/"; }
Jacques Caron
Salut,
On Fri, 18 Nov 2005 15:42:22 +0100, Gérard Breiner wrote:
J'ai un petit problème pour tester si un répertoire est vide. Je sais que dans le programme ci-dessous $pcgg n'est pas vide alors que $val l'est. Je fais mon test sans filehandle et avec filehandle mais les deux cas j'obtiens comme résultat que le répertoire est vide. Je ne vois vraiment pas ou se situe mon erreur
Euh... Où est-il dit que -z sait tester si un répertoire est vide ou pas? Il permet de tester la taille d'un fichier, et un répertoire n'étant pas (vraiment) un fichier, il doit effectivement renvoyer des choses bizarres (sur une machine Unix il répond toujours une chaîne vide, parce que le "fichier" correspondant n'est jamais de taille 0, il y a toujours au moins . et .. dedans, et il ne décroit jamais, en plus). Et le -z readdir ça va tester la taille du premier fichier du répertoire.
La bonne solution est vraisemblablement quelque chose comme:
Mais ça peut être plus subtil que ça sous Windows, éventuellement.
Jacques. -- Oxado http://www.oxado.com/
Salut,
On Fri, 18 Nov 2005 15:42:22 +0100, Gérard Breiner
<gerard.breiner@ias.u-psud.fr> wrote:
J'ai un petit problème pour tester si un répertoire est vide.
Je sais que dans le programme ci-dessous $pcgg n'est pas vide alors que
$val l'est.
Je fais mon test sans filehandle et avec filehandle mais les deux cas
j'obtiens comme résultat que le répertoire est vide.
Je ne vois vraiment pas ou se situe mon erreur
Euh... Où est-il dit que -z sait tester si un répertoire est vide ou pas?
Il permet de tester la taille d'un fichier, et un répertoire n'étant pas
(vraiment) un fichier, il doit effectivement renvoyer des choses bizarres
(sur une machine Unix il répond toujours une chaîne vide, parce que le
"fichier" correspondant n'est jamais de taille 0, il y a toujours au moins
. et .. dedans, et il ne décroit jamais, en plus). Et le -z readdir ça va
tester la taille du premier fichier du répertoire.
La bonne solution est vraisemblablement quelque chose comme:
On Fri, 18 Nov 2005 15:42:22 +0100, Gérard Breiner wrote:
J'ai un petit problème pour tester si un répertoire est vide. Je sais que dans le programme ci-dessous $pcgg n'est pas vide alors que $val l'est. Je fais mon test sans filehandle et avec filehandle mais les deux cas j'obtiens comme résultat que le répertoire est vide. Je ne vois vraiment pas ou se situe mon erreur
Euh... Où est-il dit que -z sait tester si un répertoire est vide ou pas? Il permet de tester la taille d'un fichier, et un répertoire n'étant pas (vraiment) un fichier, il doit effectivement renvoyer des choses bizarres (sur une machine Unix il répond toujours une chaîne vide, parce que le "fichier" correspondant n'est jamais de taille 0, il y a toujours au moins . et .. dedans, et il ne décroit jamais, en plus). Et le -z readdir ça va tester la taille du premier fichier du répertoire.
La bonne solution est vraisemblablement quelque chose comme:
Mais ça peut être plus subtil que ça sous Windows, éventuellement.
Jacques. -- Oxado http://www.oxado.com/
Gérard Breiner
Oui, ce code fonctionne très bien. Cependant, vous serai-t'il possible de m'apporter quelques précisions sur le fonctionnement des fonctions scalar et map ? (le 2 pour . et .. m'intrigue); En tout cas merci infiniment Kevin.
Gerard "Kevin" a écrit dans le message de news:
Salut,
A défaut de mieux le code suivant fonctionne :)
pourquoi 2 dans le if? => parce qu'il y a tjs . et .. dans un répertoire :p
my $dir="d1";
if(-d $dir && opendir(DIR, $dir) && scalar(map($_, readdir(DIR)))==2) { print "empty$/"; } else { print "not empty or not a directory$/"; }
Oui, ce code fonctionne très bien. Cependant, vous serai-t'il possible de
m'apporter quelques précisions sur le fonctionnement des fonctions scalar et
map ? (le 2 pour . et .. m'intrigue);
En tout cas merci infiniment Kevin.
Gerard
"Kevin" <kevin.dehlinger@gmail.com> a écrit dans le message de news:
1132327446.262466.46810@g49g2000cwa.googlegroups.com...
Salut,
A défaut de mieux le code suivant fonctionne :)
pourquoi 2 dans le if? => parce qu'il y a tjs . et .. dans un
répertoire :p
my $dir="d1";
if(-d $dir && opendir(DIR, $dir) && scalar(map($_, readdir(DIR)))==2)
{
print "empty$/";
}
else
{
print "not empty or not a directory$/";
}
Oui, ce code fonctionne très bien. Cependant, vous serai-t'il possible de m'apporter quelques précisions sur le fonctionnement des fonctions scalar et map ? (le 2 pour . et .. m'intrigue); En tout cas merci infiniment Kevin.
Gerard "Kevin" a écrit dans le message de news:
Salut,
A défaut de mieux le code suivant fonctionne :)
pourquoi 2 dans le if? => parce qu'il y a tjs . et .. dans un répertoire :p
my $dir="d1";
if(-d $dir && opendir(DIR, $dir) && scalar(map($_, readdir(DIR)))==2) { print "empty$/"; } else { print "not empty or not a directory$/"; }
Gérard Breiner
Effectivement -z s'applique à un fichier. Mon erreur vient du fait que je croyais qu'un répertoire était vu comme une sorte de fichier bien que ses attributs ne soient pas tout à fait les mêmes. Je vous remercie aussi pour cette solution et je vais l'essayer. Gérard
"Jacques Caron" a écrit dans le message de news:
Salut,
On Fri, 18 Nov 2005 15:42:22 +0100, Gérard Breiner wrote:
J'ai un petit problème pour tester si un répertoire est vide. Je sais que dans le programme ci-dessous $pcgg n'est pas vide alors que $val l'est. Je fais mon test sans filehandle et avec filehandle mais les deux cas j'obtiens comme résultat que le répertoire est vide. Je ne vois vraiment pas ou se situe mon erreur
Euh... Où est-il dit que -z sait tester si un répertoire est vide ou pas? Il permet de tester la taille d'un fichier, et un répertoire n'étant pas (vraiment) un fichier, il doit effectivement renvoyer des choses bizarres (sur une machine Unix il répond toujours une chaîne vide, parce que le "fichier" correspondant n'est jamais de taille 0, il y a toujours au moins . et .. dedans, et il ne décroit jamais, en plus). Et le -z readdir ça va tester la taille du premier fichier du répertoire.
La bonne solution est vraisemblablement quelque chose comme:
Mais ça peut être plus subtil que ça sous Windows, éventuellement.
Jacques. -- Oxado http://www.oxado.com/
Effectivement -z s'applique à un fichier. Mon erreur vient du fait que je
croyais qu'un répertoire était vu comme une sorte de fichier bien que ses
attributs ne soient pas tout à fait les mêmes.
Je vous remercie aussi pour cette solution et je vais l'essayer.
Gérard
"Jacques Caron" <jc@oxado.com> a écrit dans le message de news:
op.s0f0w2wvw8m2cx@news.free.fr...
Salut,
On Fri, 18 Nov 2005 15:42:22 +0100, Gérard Breiner
<gerard.breiner@ias.u-psud.fr> wrote:
J'ai un petit problème pour tester si un répertoire est vide.
Je sais que dans le programme ci-dessous $pcgg n'est pas vide alors que
$val l'est.
Je fais mon test sans filehandle et avec filehandle mais les deux cas
j'obtiens comme résultat que le répertoire est vide.
Je ne vois vraiment pas ou se situe mon erreur
Euh... Où est-il dit que -z sait tester si un répertoire est vide ou pas?
Il permet de tester la taille d'un fichier, et un répertoire n'étant pas
(vraiment) un fichier, il doit effectivement renvoyer des choses bizarres
(sur une machine Unix il répond toujours une chaîne vide, parce que le
"fichier" correspondant n'est jamais de taille 0, il y a toujours au moins
. et .. dedans, et il ne décroit jamais, en plus). Et le -z readdir ça va
tester la taille du premier fichier du répertoire.
La bonne solution est vraisemblablement quelque chose comme:
Effectivement -z s'applique à un fichier. Mon erreur vient du fait que je croyais qu'un répertoire était vu comme une sorte de fichier bien que ses attributs ne soient pas tout à fait les mêmes. Je vous remercie aussi pour cette solution et je vais l'essayer. Gérard
"Jacques Caron" a écrit dans le message de news:
Salut,
On Fri, 18 Nov 2005 15:42:22 +0100, Gérard Breiner wrote:
J'ai un petit problème pour tester si un répertoire est vide. Je sais que dans le programme ci-dessous $pcgg n'est pas vide alors que $val l'est. Je fais mon test sans filehandle et avec filehandle mais les deux cas j'obtiens comme résultat que le répertoire est vide. Je ne vois vraiment pas ou se situe mon erreur
Euh... Où est-il dit que -z sait tester si un répertoire est vide ou pas? Il permet de tester la taille d'un fichier, et un répertoire n'étant pas (vraiment) un fichier, il doit effectivement renvoyer des choses bizarres (sur une machine Unix il répond toujours une chaîne vide, parce que le "fichier" correspondant n'est jamais de taille 0, il y a toujours au moins . et .. dedans, et il ne décroit jamais, en plus). Et le -z readdir ça va tester la taille du premier fichier du répertoire.
La bonne solution est vraisemblablement quelque chose comme:
Mais ça peut être plus subtil que ça sous Windows, éventuellement.
Jacques. -- Oxado http://www.oxado.com/
Kevin
map($_, readdir(DIR)); retourne un array avec chaque fichier dans un élément du tableau
et scalar nous permet d'accéder au contexte scalaire de l'array renvoyé par map (comme chacun le sait @array dans un contexte scalaire renvoie le nombre d'éléments)
quant au 2, dans un répertoire (même vide) il y a toujours les répertoires .(répertoire courant) et .. (répertoire parent), que ce soit sous windows, linux, unix, ...
windows:
dir 18/11/2005 19:36 <REP> .
18/11/2005 19:36 <REP> ..
linux:
:~$ ls -la total 35260 drwxrwx--- 27 kevin webusers 4096 2005-11-15 21:22 . drwxrwsr-x 18 root webusers 4096 2005-11-17 00:18 ..
donc quand on tombe sur un répertoire qui contient que deux éléments, on peut dire qu'il est vide :)
map($_, readdir(DIR)); retourne un array avec chaque fichier dans un
élément du tableau
et scalar nous permet d'accéder au contexte scalaire de l'array
renvoyé par map (comme chacun le sait @array dans un contexte scalaire
renvoie le nombre d'éléments)
quant au 2, dans un répertoire (même vide) il y a toujours les
répertoires .(répertoire courant) et .. (répertoire parent), que ce
soit sous windows, linux, unix, ...
windows:
dir
18/11/2005 19:36 <REP> .
18/11/2005 19:36 <REP> ..
linux:
kevin@null-ns0:~$ ls -la
total 35260
drwxrwx--- 27 kevin webusers 4096 2005-11-15 21:22 .
drwxrwsr-x 18 root webusers 4096 2005-11-17 00:18 ..
donc quand on tombe sur un répertoire qui contient que deux
éléments, on peut dire qu'il est vide :)
map($_, readdir(DIR)); retourne un array avec chaque fichier dans un élément du tableau
et scalar nous permet d'accéder au contexte scalaire de l'array renvoyé par map (comme chacun le sait @array dans un contexte scalaire renvoie le nombre d'éléments)
quant au 2, dans un répertoire (même vide) il y a toujours les répertoires .(répertoire courant) et .. (répertoire parent), que ce soit sous windows, linux, unix, ...
windows:
dir 18/11/2005 19:36 <REP> .
18/11/2005 19:36 <REP> ..
linux:
:~$ ls -la total 35260 drwxrwx--- 27 kevin webusers 4096 2005-11-15 21:22 . drwxrwsr-x 18 root webusers 4096 2005-11-17 00:18 ..
donc quand on tombe sur un répertoire qui contient que deux éléments, on peut dire qu'il est vide :)
Jacques Caron
Salut,
On Fri, 18 Nov 2005 18:27:54 +0100, Gérard Breiner wrote:
Effectivement -z s'applique à un fichier. Mon erreur vient du fait que je croyais qu'un répertoire était vu comme une sorte de fichier bien que ses attributs ne soient pas tout à fait les mêmes.
Sous Unix, oui, un répertoire est une sorte de fichier, mais: - il contient toujours au moins . et .. - il a dans certaines implémentations une taille toujours multiple de la taille du secteur - en général, il ne réduit pas quand on efface des fichiers
Donc sous Unix un -z sur un directory est toujours faux, le "fichier" correspondant étant toujours non vide.
Sous Windows (ce qui semble être ton cas) je ne sais pas trop...
Jacques. -- Oxado http://www.oxado.com/
Salut,
On Fri, 18 Nov 2005 18:27:54 +0100, Gérard Breiner
<gerard.breiner@ias.u-psud.fr> wrote:
Effectivement -z s'applique à un fichier. Mon erreur vient du fait que
je croyais qu'un répertoire était vu comme une sorte de fichier bien que
ses
attributs ne soient pas tout à fait les mêmes.
Sous Unix, oui, un répertoire est une sorte de fichier, mais:
- il contient toujours au moins . et ..
- il a dans certaines implémentations une taille toujours multiple de la
taille du secteur
- en général, il ne réduit pas quand on efface des fichiers
Donc sous Unix un -z sur un directory est toujours faux, le "fichier"
correspondant étant toujours non vide.
Sous Windows (ce qui semble être ton cas) je ne sais pas trop...
On Fri, 18 Nov 2005 18:27:54 +0100, Gérard Breiner wrote:
Effectivement -z s'applique à un fichier. Mon erreur vient du fait que je croyais qu'un répertoire était vu comme une sorte de fichier bien que ses attributs ne soient pas tout à fait les mêmes.
Sous Unix, oui, un répertoire est une sorte de fichier, mais: - il contient toujours au moins . et .. - il a dans certaines implémentations une taille toujours multiple de la taille du secteur - en général, il ne réduit pas quand on efface des fichiers
Donc sous Unix un -z sur un directory est toujours faux, le "fichier" correspondant étant toujours non vide.
Sous Windows (ce qui semble être ton cas) je ne sais pas trop...
Jacques. -- Oxado http://www.oxado.com/
gbreiner
Bonsoir,
Je suis sous windows, les répertoires contiennent aussi les "." et " .."." Merci Jacques pour tes explications et solution que j'ai d'ailleurs adopté. Gérard "Jacques Caron" a écrit dans le message de news:
Salut,
On Fri, 18 Nov 2005 18:27:54 +0100, Gérard Breiner wrote:
Effectivement -z s'applique à un fichier. Mon erreur vient du fait que je croyais qu'un répertoire était vu comme une sorte de fichier bien que ses attributs ne soient pas tout à fait les mêmes.
Sous Unix, oui, un répertoire est une sorte de fichier, mais: - il contient toujours au moins . et .. - il a dans certaines implémentations une taille toujours multiple de la taille du secteur - en général, il ne réduit pas quand on efface des fichiers
Donc sous Unix un -z sur un directory est toujours faux, le "fichier" correspondant étant toujours non vide.
Sous Windows (ce qui semble être ton cas) je ne sais pas trop...
Jacques. -- Oxado http://www.oxado.com/
Bonsoir,
Je suis sous windows, les répertoires contiennent aussi les "." et " .."."
Merci Jacques pour tes explications et solution que j'ai d'ailleurs adopté.
Gérard
"Jacques Caron" <jc@oxado.com> a écrit dans le message de news:
op.s0iefnghw8m2cx@news.free.fr...
Salut,
On Fri, 18 Nov 2005 18:27:54 +0100, Gérard Breiner
<gerard.breiner@ias.u-psud.fr> wrote:
Effectivement -z s'applique à un fichier. Mon erreur vient du fait que
je croyais qu'un répertoire était vu comme une sorte de fichier bien que
ses
attributs ne soient pas tout à fait les mêmes.
Sous Unix, oui, un répertoire est une sorte de fichier, mais:
- il contient toujours au moins . et ..
- il a dans certaines implémentations une taille toujours multiple de la
taille du secteur
- en général, il ne réduit pas quand on efface des fichiers
Donc sous Unix un -z sur un directory est toujours faux, le "fichier"
correspondant étant toujours non vide.
Sous Windows (ce qui semble être ton cas) je ne sais pas trop...
Je suis sous windows, les répertoires contiennent aussi les "." et " .."." Merci Jacques pour tes explications et solution que j'ai d'ailleurs adopté. Gérard "Jacques Caron" a écrit dans le message de news:
Salut,
On Fri, 18 Nov 2005 18:27:54 +0100, Gérard Breiner wrote:
Effectivement -z s'applique à un fichier. Mon erreur vient du fait que je croyais qu'un répertoire était vu comme une sorte de fichier bien que ses attributs ne soient pas tout à fait les mêmes.
Sous Unix, oui, un répertoire est une sorte de fichier, mais: - il contient toujours au moins . et .. - il a dans certaines implémentations une taille toujours multiple de la taille du secteur - en général, il ne réduit pas quand on efface des fichiers
Donc sous Unix un -z sur un directory est toujours faux, le "fichier" correspondant étant toujours non vide.
Sous Windows (ce qui semble être ton cas) je ne sais pas trop...