Schrift
[thread]7269[/thread]

rekursives Filewalking: wozu ist die Beschreibung eigentlich gut



<< >> 6 Einträge, 1 Seite
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;
}
renee
 2005-09-12 14:21
#57841 #57841
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Mehr Infos (z.B. Fehlermeldungen) wären ganz nützlich...
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
pKai
 2005-09-12 14:46
#57842 #57842
User since
2005-02-18
357 Artikel
BenutzerIn
[default_avatar]
Du musst das globale Directory-Handle DIR noch lokalisieren (besser eine sub-lokale my-Variable verwenden), dann müsste es gehen.
I sense a soul in search of answers.
DocJunioR
 2005-09-15 16:44
#57843 #57843
User since
2005-08-29
53 Artikel
BenutzerIn
[default_avatar]
also ich arbeite jetzt seit 2 Wochen mit Perl, oder lass es 3 sein.
Kannst du mir da evtl. auch erklären, wie ich dieses tue?
renee
 2005-09-15 16:49
#57844 #57844
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Code: (dl )
opendir(my $dirhandle,$lfile) or die $!;


und alle weiteren DIR durch $dirhandle ersetzen...\n\n

<!--EDIT|renee|1126788832-->
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
DocJunioR
 2005-09-15 17:05
#57845 #57845
User since
2005-08-29
53 Artikel
BenutzerIn
[default_avatar]
na des hilft doch schonmal :) thx
<< >> 6 Einträge, 1 Seite



View all threads created 2005-09-12 14:00.