[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