Thread rekursives Filewalking: wozu ist die Beschreibung eigentlich gut (5 answers)
Opened by DocJunioR at 2005-09-12 14:00

DocJunioR
 2005-09-12 14:00
#57840 #57840
User since
2005-08-29
53 Artikel
BenutzerIn
[default_avatar]
Also ich hab mir nun selbst nen lustitsch kleines FTP-Tool geschrieben. Dieses funktioniert auch soweit ganz gut, nur wenn ich nen Verzeichnis kopiere hab ich natürlich nen Problem..
Also hab ich nen rekursiven Algorithmus geschrieben.
(Wollte den Satz mal so stehen lassen. Find das in StarTrek auch immer toll, wenn so einer irgendwo implementiert wird. Funktioniert immer, auch wenn keiner weiß, was rekursiv getan werden soll... ;-) )

Ich möchte also rekursiv mein Verzeichnis durchlaufen.
Das Ganze sieht dann so aus:
Code: (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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
# ######################################################################################## #
# rekursiver put für Verzeichnisse
# ######################################################################################## #
sub rput
{
my $self = shift;

my ($lfile, $rfile) = @_;

print "---------------------------\n checking $lfile : $rfile \n";
if (-d $lfile)
{
if (0 == $self->rchkdir($rfile))
{ # Verzeichnis erstellen, wenn es noch nicht existiert
print "creating $rfile\n";

$self->{'ftpcon'}->mkdir ($rfile);
}

opendir(DIR,$lfile) or die $!;
while(my $file = readdir(DIR))
{
print ("Read : ".$lfile.$file.".\n");


if ("." ne $file and ".." ne $file)

{ # redo put.

if (-d $lfile.$file)

{

$self->rput ($lfile.$file."/", $rfile.$file."/");

}

else

{
print "putting (".$lfile.$file.", ".$rfile.$file.")\n";

$self->rput ($lfile.$file, $rfile.$file);

}

}
}
closedir (DIR);

}
else
{
$self->{'ftpcon'}->put($lfile, $rfile);
}

return;
}

Allerdings geht er nur in mein erstes Unterverzeichnis. Dort stirbt meine Funktion dann scheinbar beim Rücksprung in die übergeordnete Funktion ab.
Kann mir wer erklären, warum?

axoo.. das rchkdir ist auch noch nicht perfekt, wenn mir da wer ne bessere Möglichkeit nennen könnte, wäre das toll. Ich gehe hier nur davon aus, dass eine Datei, die im remoteverzeichnis existiert auch ein Verzeichnis ist, wenn dem lokal der Fall ist.

Code: (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
# ######################################################################################## #
# remote test -d
# ######################################################################################## #

sub rchkdir
{
my $self = shift;
my $file = $_[0];
my @list = $self->{'ftpcon'}->dir ($file);
my $exists = 0;

foreach (@list)
{
if (/$file/)
{
print ("Is dir!\n");


$exists = 1;
}
}

return $exists;
}

View full thread rekursives Filewalking: wozu ist die Beschreibung eigentlich gut