[Vienna-pm] Problem mit rewinddir

LAUN Wolfgang wolfgang.laun at alcatel.at
Wed Oct 15 01:16:47 CDT 2003


> -----Original Message-----
> From: Baier Oliver MAX SD [mailto:BaierO at spardat.at]
> Sent: Tuesday, October 14, 2003 7:07 PM
> To: LAUN Wolfgang
> Cc: Vienna. Pm (E-Mail)
> Subject: AW: [Vienna-pm] Problem mit rewinddir
> 
> 
> Hallo Wolfgang,
> 
> das kann ich so nicht bestaetigen, da ich ja problemlos den
> Verzeichnisbaum runterwandern kann und die jeweils richtigen
> Unterverzeichnisse bekomme.

Das ist habe ich nicht in Frage gestellt. Die Verzeichnisse
werden durch das erste foreach (... readdir DIR) korrekt
unmittelbar nach dem Eröffnen eines weiteren Verzeichnisses
ausgelesen; danach kommt cleandir in alle Unterverzeichnisse. 

> Auch scheint das anschliessende
> rewinddir nicht prinzipiell zu scheitern, da ich meistens
> die korrekte Anzahl an darin enthaltenen Dateien angezeigt
> bekomme.

Ein Directory ohne Unterverzeichnisse wird korrekt verarbeitet,
da hier kein opendir DIR mit einem Unterverzeichnis zwischen
dem ersten und dem zweiten Lesen dazwischenkommt. Das kann
schon die Mehrzahl der Directories sein. 

> 
> Aber irgendwie hast du damit auch recht, weil ich soeben
> opendir & Co auf die OO-Variante umgestellt habe
> 	my $D = DirHandle->new("$dir")...
> und alle 13000 Verzeichnisse und 35000 Dateien korrekt
> aufgelistet werden.
> 

Klar: DirHandle (und auch FileHandle) verwenden Symbol::gensym,
um vor jedem open ein neues Glob (in Symbol::) anzulegen.
Mit der zurückgelieferten Referenz auf das Glob gelingt das
open(dir) ohne Namenskollision. 

Servus
Wolfgang

> Was auch immer anders schiefgeht, so klappt's.
> Danke fuer den Hinweis!
> 
> lg
> Oliver
> 
> 
> > -----Ursprüngliche Nachricht-----
> > Von: LAUN Wolfgang [mailto:wolfgang.laun at alcatel.at]
> > Gesendet: Dienstag, 14. Oktober 2003 18:45
> > An: Baier Oliver MAX SD; Thomas Klausner
> > Cc: Vienna. Pm (E-Mail)
> > Betreff: RE: [Vienna-pm] Problem mit rewinddir
> > 
> > 
> > Vielleicht war mein Hinweis nicht deutlich genug: Das Problem
> > der nicht gefundenen Files kommt m.E. davon, dass DIR global
> > sichtbar ist und im rekursivn Aufruf wieder verwendet wird.
> > Dadurch wird DIR mit einem anderen Directory neu eröffne,
> > und die Fortsetzung mit rewinddir usw. nach der Rückkehr aus
> > dem rekursiven Aufruf liest etwas ganz anderes.
> > 
> > Jede Rekursionsebene benötigt ihr eigenes Handle DIR. (Darauf wird
> > etwa in perlfunc oder perlsub hingewiesen.) Es ist möglich,
> > mit local *DIR auf jeder Rekursionsebene ein neues DIR 
> > bereitzustellen.
> > 
> > HTH
> > -Wolfgang
> >  
> > 
> > > -----Original Message-----
> > > From: Baier Oliver MAX SD [mailto:BaierO at spardat.at]
> > > Sent: Tuesday, October 14, 2003 5:11 PM
> > > To: Thomas Klausner
> > > Cc: Vienna. Pm (E-Mail)
> > > Subject: AW: [Vienna-pm] Problem mit rewinddir
> > > 
> > > 
> > > Hi,
> > > 
> > > kenne File::Find nicht so genau, aber habe gerade gelesen,
> > > dass es keine Argumente uebergeben kann und ich deshalb
> > > vermutlich ein Problem damit haette, jedes Verzeichnis
> > > zu behandeln und je nach Ergebnis a oder b ans naechste
> > > Verzeichnis weiterzureichen.
> > > 
> > > Hast du vielleicht auch eine Alternative zu rewinddir,
> > > die performanter ist als closedir&&opendir?
> > > 
> > > lg
> > > Oliver
> > > 
> > 
> 



More information about the Vienna-pm mailing list