PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Dateien kopieren mit Perl unter Windows



A. Schilli
28.08.2000, 15:57
Hallo zusammen!

Ich habe folgendes Problem: Ich hätte gerne mein lokales Perl-Script, welches eine Datei (setup.exe in meinem Fall) kopiert, und unter einem anderen Namen (setup2.exe) wieder ausgibt.

Ich hab da mal folgendes programmiert, aber das will nicht recht funktionieren, es kommt nur eine 2KB-Datei heraus.

#!/usr/bin/perl -w

open(DATEI, "setup.exe") | | die "Kann setup.exe nicht öffnen: $!";

$inhalt="";
while (<DATEI> ){
$inhalt=$inhalt.$_;
}
close DATEI;
open(DATEI, ">setup2.exe") &#0124; &#0124; die "Kann setup2.exe nicht anlegen: $!";

print DATEI "$inhalt";

close DATEI;

Kann mir vielleicht jemand einen Tipp geben, wie ich das Script zum laufen bringen könnte?

Vielen Dank zum Voraus!

A. Schilli

pasomatic
28.08.2000, 17:23
#!/usr/bin/perl -w

open(DATEI, "setup.exe") | | die "Kann setup.exe nicht öffnen: $!";

@inhalt=("");
while (<DATEI> ){
DATEI = @inhalt;
}
close DATEI;
open(DATEI, ">setup2.exe") | | die "Kann setup2.exe nicht anlegen: $!";
foreach $inhalte(@inhalt)
{
print DATEI "$inhalte">
}
close DATEI;


cu Pasomatic

A. Schilli
31.08.2000, 17:27
Hi pasomatic!

Ich hab das Script bei mir getestet. Es hat leider nicht funktioniert. Ich habe einmal versucht, die Bugs auszubügeln, aber es funktioniert immer noch nicht. Wenigstens erstellt es jetzt eine Datei, aber sie ist viel zu klein. (Im Explorer 1 KB) Das Icon dazu wird ebenfalls nicht angezeigt.

Was ist jetzt schon wieder falsch?

#!/usr/bin/perl -w

open(DATEI, "setup.exe") &#0124; &#0124; die "Kann setup.exe nicht öffnen: $!";
@inhalt=("");
while (<DATEI> ){
@inhalt = DATEI;
}
close DATEI;
open(DATEI, ">setup2.exe") &#0124; &#0124; die "Kann setup2.exe nicht anlegen: $!";
foreach $inhalte(@inhalt)
{
print DATEI "$inhalte";
}
close DATEI;

Vielen Dank zum voraus!

A. Schilli

PS: Ist meine Signatur zu lang?

pasomatic
31.08.2000, 20:28
So,ich habe mir jetzt die Zeit genommen und habe das Programm wirklich gecodet,und auch getestet.Es klappt einwandfrei.
Hier ist der Source:


#!/usr/bin/perl -w

print "Geben sie die Datei ein,aus welcher der Inhalt ausgelesen werden soll:\n";
$datei = <STDIN>;
chop $datei;

print "Geben sie den Dateinamen fuer die Kopie der obigen Datei an:\n";
$datei2 = <STDIN>;
chop $datei2;


open(DATEI,"<$datei") or die "Kann $datei nicht öffnen nicht öffnen: $!";
@inhalt=("");
while (<DATEI> ){
$zeile = <DATEI>;
push @inhalt,$zeile;
}
close DATEI;
open(DATEI2, ">$datei2") or die "Kann $datei2 nicht anlegen: $!";
foreach $inhalte(@inhalt)
{
print DATEI2 "$inhalte";
}
close DATEI2;


Falls du Fragen zum Quelltext hast ,frag ruhig.
cu Pasomatic

P.S. http://www.buschboard.de/NonCGI/biggrin.gifas musste ja mal sein,hehe,sonst denkt noch jeder ich kann garkein Perl,(:
P.P.S.:Nein,deine Signatur ist nicht zu lang.

SorroW
03.09.2000, 18:12
Nachdem mein erstes posting irgendwo im Nirvana verschwand, hier das wichtigste:


<untested code>

#!/usr/bin/perl -w
use strict;

my $progname="Prog.exe";
my $target="target.exe";

open (READ, "< $progname") or die "Fehler: $!";
my @daten=<READ>;
close (READ) or die "Fehler: $!";


open (WRITE, "> $target") or die "Fehler: $!";
print WRITE @daten;
close (WRITE) or die "Fehler: $!";

print "\n Fertig \n";

</untested code>

bye SorroW

[Dieser Beitrag wurde von SorroW am 04. September 2000 editiert.]

dschungelratte
04.09.2000, 14:07
Hi Leutz,

so wie ihr das lles (sehr nett ;)) gecodet habt wird doch die jeweilige Datei immer im ASCII-Modus kopiert oda ? Funktioniert das ganze auch mit einer Bilddatei (Binär) ? Das hab ich auch schon mal versucht ... und dann kahm das gleiche raus wie wenn man ein Bild per ASCII "ftp-uploadet" :(

cu & bye ...
<dschungelratte>

pasomatic
04.09.2000, 14:20
Ja,es wird im ASCII-Modus kopiert.
Aber du kannst es auch per Binär kopieren,indem du einfach
binmode DATEIHANDLE
eingibst.dann wird die Datei im Binärmodus verarbeitet.
cu Pasomatic

SorroW
04.09.2000, 16:38
Original erstellt von dschungelratte:
Hi Leutz,

Tach auch

so wie ihr das lles (sehr nett ;)) gecodet habt wird doch die jeweilige Datei immer im ASCII-Modus kopiert oda ?

hmm, nur bei systemen, die zwischen Text- und Binaermodus unterscheiden.
Unix und Plan 9 sind imo davon nicht betroffen ;)


Funktioniert das ganze auch mit einer Bilddatei (Binär) ? Das hab ich auch schon mal versucht ... und dann kahm das gleiche raus wie wenn man ein Bild per ASCII "ftp-uploadet" :(

Duerfte eigentlich, solange es immer auf dem selben System bleibt, keine Probleme geben.
Aber, falls doch perldoc -f binmode

e.g.
open (WP, "$file.wp") or die "Fehler: $!";
binmode WP;
while (read WP, $buf, 1024) {... bla ...}

cu & bye ...

<dschungelratte>
bye
SorroW

dschungelratte
04.09.2000, 17:27
thx für die Infos !

Ich hab gerade eben das gleiche über ICQ vom MOD hier bekommen ... also :

thx an euch zwei ! :)

cu & bye ...
<dschungelratte>