Schrift
[thread]7488[/thread]

FTP Programm Upload

Leser: 1


<< |< 1 2 3 >| >> 26 Einträge, 3 Seiten
duerov
 2005-11-22 14:33
#60305 #60305
User since
2005-10-26
27 Artikel
BenutzerIn
[default_avatar]
Hallo zusammen,
wollte mir ein kleines ftp-Programm schreiben, das alle Dateien eines Verzeichnisses auf einen FTP-Server hochlädt. Hab das mal versucht so zu realisieren:

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#!D:/Programme/Perl

use strict;
use warnings;
use Net::FTP;


my $ftp = Net::FTP->new("host.de");
die "Konnte keine Verbindung aufbauen $!" unless $ftp;
$ftp->login("name", "passwort");
opendir(DIR, "C:/temp");
my @inhalt = readdir(DIR);
foreach(@inhalt)
{
$ftp->put("$_"); #Zeile 17
}
$ftp->quit;

Ich seh irgendwie nicht was daran falsch ist, bekomm aber immer Folgende Meldung:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
D:\Programme\Perl\eg>ftp.pl
Cannot open Local file .: Permission denied
at D:\Programme\Perl\eg\ftp.pl line 17
Cannot open Local file ..: Permission denied
at D:\Programme\Perl\eg\ftp.pl line 17

Cannot open Local file berichte.txt: No such file or directory
at D:\Programme\Perl\eg\ftp.pl line 17

Cannot open Local file formate.txt: No such file or directory
at D:\Programme\Perl\eg\ftp.pl line 17

Cannot open Local file text1.txt: No such file or directory
at D:\Programme\Perl\eg\ftp.pl line 17

Der Pfad dürft doch richtig angegeben sein, und warum der Zugriff verweigert wird ist mir auch unklar.

Gruß und Dank im Voraus
duerov
Crian
 2005-11-22 14:55
#60306 #60306
User since
2003-08-04
5870 Artikel
ModeratorIn
[Homepage]
user image
perldoc -f readdir

Quote
readdir DIRHANDLE
Returns the next directory entry for a directory opened by
"opendir". If used in list context, returns all the rest of the
entries in the directory. If there are no more entries, returns
an undefined value in scalar context or a null list in list
context.

If you're planning to filetest the return values out of a
"readdir", you'd better prepend the directory in question.
Otherwise, because we didn't "chdir" there, it would have been
testing the wrong file.


opendir(DIR, $some_dir) || die "can't opendir $some_dir: $!";
@dots = grep { /^\./ && -f "$some_dir/$_" } readdir(DIR);
closedir DIR;


Also probier mal

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
#!/usr/bin/perl
use strict;
use warnings;
use Net::FTP;

my $ftp = Net::FTP->new("host.de");
my $path = 'c:/temp';
die "Konnte keine Verbindung aufbauen $!" unless $ftp;
$ftp->login("name", "passwort");
opendir(DIR, $path);
my @inhalt = readdir(DIR);
$ftp->put($path . '/' . $_) for @inhalt;
$ftp->quit;
\n\n

<!--EDIT|Crian|1132664291-->
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
svenXY
 2005-11-22 15:08
#60307 #60307
User since
2005-09-15
33 Artikel
BenutzerIn
[default_avatar]
jo, den Fehler muss auch jeder genau einmal machen ;-) - Du hasts jetzt rum!
Crian
 2005-11-22 15:37
#60308 #60308
User since
2003-08-04
5870 Artikel
ModeratorIn
[Homepage]
user image
Und gleich vorweg: Falls Du mal File::Find einsetzt: da kann man einen ähnlichen Fehler machen -> siehe perldoc File::Find :)
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
sesth
 2005-11-22 16:09
#60309 #60309
User since
2005-02-01
181 Artikel
BenutzerIn
[default_avatar]
Du solltest noch "." und ".." in der Schleife überspringen.
Gruß
Thomas
esskar
 2005-11-22 16:32
#60310 #60310
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
und hier auch noch ne schnell variante

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#!/usr/bin/perl
use strict;
use warnings;
use Net::FTP;

my $path = 'c:/temp';

my $ftp = Net::FTP->new("host.de") or die "Konnte keine Verbindung aufbauen $!";
$ftp->login("name", "passwort") or die "Login failed: $!";
if(opendir(my $handle, $path)) {
  while(my $file = readdir $handle) {
     next if $file =~ m#^\.\.?$#;
     $ftp->put($path . '/' . $file);
  }
  closedir $handle;
}
$ftp->quit;
\n\n

<!--EDIT|esskar|1132669962-->
duerov
 2005-11-23 10:33
#60311 #60311
User since
2005-10-26
27 Artikel
BenutzerIn
[default_avatar]
Guten Morgen.
Danke für eure Antworten.
@Crian:
Hab mal deine Methode ausprobiert und dabei folgende Zeile
Code: (dl )
my @inhalt = readdir(DIR);

durch diese Zeile ersetzt
Code: (dl )
my @inhalt = grep { /^\./ && -f "$path/$_" }readdir(DIR);

Du hast ja auf die perdoc hingewiesen, und da stehts so drin.
Außerdem hab ich noch ein
Code: (dl )
closedir DIR;

hinzugefügt.
Das Problem hier ist, dass er mir die Daten beim ersten Mal hochlädt, wenn ich sie dann lösche und das Script wieder ausführe macht er nichts. Er lädt die Dateien nicht mehr hoch.
(edit: Jetzt lädt er nichts mehr hoch)

Interssieren würde mich auch noch, warum er es nicht will, wenn ich den Pfad per
Code: (dl )
my $path = <STDIN>;

eingebe.\n\n

<!--EDIT|duerov|1132738524-->
esskar
 2005-11-23 13:16
#60312 #60312
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
was macht mein script ?
Dubu
 2005-11-23 13:45
#60313 #60313
User since
2003-08-04
2145 Artikel
ModeratorIn + EditorIn

user image
[quote=duerov,23.11.2005, 09:33]Interssieren würde mich auch noch, warum er es nicht will, wenn ich den Pfad per
Code: (dl )
my $path = <STDIN>;

eingebe.[/quote]
Machst du danach auch ein chomp(), um das Newline am Ende abzuschneiden?
duerov
 2005-11-23 14:54
#60314 #60314
User since
2005-10-26
27 Artikel
BenutzerIn
[default_avatar]
@esskar:
Sorry, dein Script läuft optimal. Hab inzwischen nur erfolglos versucht das Andere (von Crian) zum Laufen zu bringen, weil mir das weniger kompliziert erscheint.
@Dubu
Auch hier sorry, bei meinem nicht laufenden Programm hatte ichs drin, durch ständiges umstellen ist es dann irgendwann rausgeflogen (ohne dass ichs gemerkt hab :-) )
<< |< 1 2 3 >| >> 26 Einträge, 3 Seiten



View all threads created 2005-11-22 14:33.