Schrift
[thread]10565[/thread]

Verzeichnis traversieren

Leser: 1


<< >> 5 Einträge, 1 Seite
theresa
 2007-10-11 23:48
#100712 #100712
User since
2007-07-17
90 Artikel
BenutzerIn
[default_avatar]
Hallo,
habe ein kleines Problem mit einer Rekursion.
Der Kode ist vereinfacht, hab den sinnvollen Teil gelöscht da der keine Probleme verursacht...

Der Startverzeichnis soll traversiert werden bis zu einer bestimmten Tiefe.
Es gibt einige Skripte im Internet dafür, würde aber gerne wissen was hier falsch ist...

Problem ist dass nur der erste Pfad bis tiefe==0 gefolgt wird, danach bricht das Programm ab.

Wobei doch in @unterVerz die Liste der Unterverzeichnisse ist, womit es weitermachen sollte... wieso kommt es denn nicht auf sie zurück?

Im voraus vielen Dank.

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
my $startVerzeichnis = "/home1";
my $tiefe = 3;

rek($startVerzeichnis, $tiefe);

sub rek {
        
        my $verzeichnis = shift;
        my $tiefe = shift;

        if($tiefe==0){
                print "\ntiefe==0!!";
                return;
        }
        
        opendir(VERZEICHNIS, $verzeichnis);
        @unterVerz = readdir(VERZEICHNIS); 
        foreach(@unterVerz){
                if(!($_ eq ".") && !($_ eq "..")){
                        
                        #Pfad erstellen mit Unterverzeichnis/Datei ergänzt...
                        my $verzeichnisNeu = $verzeichnis . "/" . $_;   
                        
                        #Falls Verzeichnis
                        if(-d $verzeichnisNeu){
                                rek($verzeichnisNeu, $tiefe-1);
                        }
                }
        }
        #close VERZEICHNIS;
}
GwenDragon
 2007-10-11 23:51
#100714 #100714
User since
2005-01-17
14617 Artikel
Admin1
[Homepage]
user image
Mal kurz aus dem Bauch raus gedacht, denke ich:

1. @unterverzeichnis ist nicht lokal im der sub!

du musst schon
Code: (dl )
my @unterVerz = readdir(VERZEICHNIS); 
schreiben.

2. ist es auch sinnvoll das Filehandle zu lokalisieren.
Also:
Code: (dl )
1
2
3
my $vh;
opendir($vh, $verzeichnis);
my @unterVerz = readdir($vh);
pq
 2007-10-12 01:26
#100727 #100727
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
GwenDragon+2007-10-11 21:51:48--
Code: (dl )
1
2
my $vh;
opendir($vh, $verzeichnis);

oder
Code (perl): (dl )
1
2
3
opendir(my $vh, $verzeichnis);
# bzw.
opendir(my $vh, $verzeichnis) or die $!;
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
theresa
 2007-10-12 15:20
#100757 #100757
User since
2007-07-17
90 Artikel
BenutzerIn
[default_avatar]
Quote
du musst schon

my @unterVerz = readdir(VERZEICHNIS);

schreiben.

stimmt, jetzt läuft das Skript auch richtig. Das mit dem Filehandle habe ich auch sicherheitshalber ersetzt. Vielen Dank!
pktm
 2007-10-12 20:08
#100776 #100776
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
Da benutze ich auch gerne CPAN:DirHandle, oder gleich CPAN:File::Find::Rule.
http://www.intergastro-service.de (mein erstes CMS :) )
<< >> 5 Einträge, 1 Seite



View all threads created 2007-10-11 23:48.