[Vienna-pm] Problem mit rewinddir
LAUN Wolfgang
wolfgang.laun at alcatel.at
Tue Oct 14 09:10:56 CDT 2003
Rekursive Prozeduren vertragen sich nicht gut mit Filehandles,
und mit Directory-Handles ist es nicht anders.
Wolfgang
> -----Original Message-----
> From: Baier Oliver MAX SD [mailto:BaierO at spardat.at]
> Sent: Tuesday, October 14, 2003 3:10 PM
> To: Vienna. Pm (E-Mail)
> Subject: [Vienna-pm] Problem mit rewinddir
>
>
> Hi,
>
> ich durchsuche rekursiv bestimmte Verzeichnisse und loesche
> deren Unterverzeichnisse, wenn diese nicht auf einer "Liste"
> stehen oder Dateien enthalten.
>
> Irgendwie scheint rewinddir nicht ganz so zu funktionieren,
> wie ich es mir vorstelle.
>
> Meine Subroutine lautet:
>
> sub cleandir {
> my ($countref, $dir) = @_;
> my $deleteflag = 1;
> opendir DIR, $dir or warn "open-error bei $dir: $!\n";
> foreach ( grep -d, map "$dir/$_", grep !/^\.\.?$/, readdir DIR ) {
> $deleteflag *= cleandir($countref, $_);
> }
> # rewinddir DIR;
> closedir DIR;
> opendir DIR, $dir or warn "open-error bei $dir: $!\n";
> my $files = grep -f, map "$dir/$_", readdir DIR;
> closedir DIR;
> if ($deleteflag && !$files && !exists $templates{$dir}) {
> print "loesche $dir ($files Dateien)\n";
> #rmdir $dir or warn "delete-error bei $dir: $!\n";
> $$countref++;
> return 1;
> } else {
> print "verschone $dir ($files Dateien)\n";
> }
> return 0;
> }
>
> und fuehrt (mit open&close) zum Ergebnis:
>
> | loesche /data/apache_entw_dev/newsroom/images/no_a_dir (0 Dateien)
> | loesche
> /data/apache_entw_dev/newsroom/images/nr_banner_aboservice_neu
> .gif (0 Dateien)
> | verschone
> /data/apache_entw_dev/newsroom/images/und_a_dir_mit_feus (2 Dateien)
> | loesche
> /data/apache_entw_dev/newsroom/images/und_no_ans_ohne (0 Dateien)
> | verschone /data/apache_entw_dev/newsroom/images (52 Dateien)
>
> wenn ich allerdings rewinddir statt open&close verwende,
> erhalte ich ein falsches Ergebnis:
>
> | loesche /data/apache_entw_dev/newsroom/images/no_a_dir (0 Dateien)
> | loesche
> /data/apache_entw_dev/newsroom/images/nr_banner_aboservice_neu
> .gif (0 Dateien)
> | verschone
> /data/apache_entw_dev/newsroom/images/und_a_dir_mit_feus (2 Dateien)
> | loesche
> /data/apache_entw_dev/newsroom/images/und_no_ans_ohne (0 Dateien)
> | verschone /data/apache_entw_dev/newsroom/images (0 Dateien)
>
> Das uebergebene Verzeichnis ".../images" wird in diesem Fall zwar
> trotzdem verschont, weil's berechtigte Unterverzeichnisse erhaelt,
> aber die Anzahl der Dateien ist falsch.
>
> Warum?
>
> lg
> Oliver
> _______________________________________________
> Vienna-pm mailing list
> Vienna-pm at mail.pm.org
> http://mail.pm.org/mailman/listinfo/vienna-pm
>
More information about the Vienna-pm
mailing list