Schrift
[thread]4303[/thread]

Mit IO::Socket datei herunterladen?: Weiß nicht wie.. (Seite 2)



<< |< 1 2 >| >> 14 Einträge, 2 Seiten
GloBoX
 2005-06-07 15:41
#37686 #37686
User since
2005-05-25
8 Artikel
BenutzerIn
[default_avatar]
Hallo, ich bin es mal wieder.

Ich hab mir mit LWP eine download funktion gemacht. Die funktioniert allerdings nur für txt basierende dateien, doch nicht für andere dateien wie rar, zip, exe etc.

Weiß jemand vieleicht wieso?
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
use LWP::UserAgent;
use strict;
use warnings;

sub download {
# von, wohin
my $execf = $_[1];
$execf =~ s/chr(92)/chr(92)chr(92)/;
my $get = LWP::UserAgent->new;
my $req = HTTP::Request->new(GET => $_[0]);
my $gettxt = $get->request($req);
my $quell = $gettxt->content;
open dfile, "> $execf";
print dfile $quell;
close dfile;
}

&download('http', 'C:\test');


gruß gbx
betterworld
 2005-06-07 16:29
#37687 #37687
User since
2003-08-21
2614 Artikel
ModeratorIn

user image
Wahrscheinlich hast Du nur vergessen, in den Binärmodus zu wechseln:
Code: (dl )
1
2
3
4
5
6
...
open dfile, "> $execf" or die $!;
binmode dfile;
print dfile $quell;
close dfile;
...

Beachte auch das "or die $!", das bewahrt Dich vor einigen Problemen.
betterworld
 2005-06-09 00:23
#37688 #37688
User since
2003-08-21
2614 Artikel
ModeratorIn

user image
[quote=Dubu,08.06.2005, 21:10][quote=GloBoX,07.06.2005, 13:41]
Code: (dl )
$execf =~ s/chr(92)/chr(92)chr(92)/;
[/quote]
Diese Zeile macht garantiert nicht das, was du moechtest.[/quote]
Es sieht fast so aus, als ob er versucht, Backslashes in Dateinamen zu escapen...
Ich habe zwar kein Windows, aber ich bin mir eigentlich sicher, dass doppelte Backslashes genauso verboten in Dateinamen sind wie einfache.

Update: Wahrscheinlicher aber denkt Globox: Wenn man open "> c:\\test" schreiben muss, dann muesste auch bei open "> $execf" ein doppelter Backslash in $execf stehen. Das ist aber nicht so. Der Backslash muss nur an der Stelle escapet werden, an der er im Quelltext steht, und das ist in der letzten Zeile:
Code: (dl )
&download('http', 'C:\test');
An dieser Stelle hat Globox einfache Anfuehrungszeichen gewaehlt, und damit ist das Escaping schon okay.\n\n

<!--EDIT|betterworld|1118262609-->
esskar
 2005-06-09 18:07
#37689 #37689
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
[quote=betterworld,08.06.2005, 22:23]Ich habe zwar kein Windows, aber ich bin mir eigentlich sicher, dass doppelte Backslashes genauso verboten in Dateinamen sind wie einfache.[/quote]
ne...
ein backslash ist der vereichnistrenner in windows

und witzigerweise zeigt c:\\test auch auf c:\test
<< |< 1 2 >| >> 14 Einträge, 2 Seiten



View all threads created 2005-06-04 17:36.