Schrift
[thread]11419[/thread]

Datei übers Netzwerk umbenennen geht nicht

Leser: 2


<< >> 9 Einträge, 1 Seite
oes
 2008-03-06 00:28
#106743 #106743
User since
2008-02-26
11 Artikel
BenutzerIn
[default_avatar]
Verzwicktes Problem:

$unc_z ergibt z.B. \\192.168.0.20\c$\\
und $file_name wäre \\192.168.0.20\c$\datei.txt
Code: (dl )
1
2
3
$unc_z="\\\\$remote{$hsh_key}\\c\$\\";
$file_name="$unc_z$temp.$hsh_key";
rename ($file_name, $file_name."\.md5err");


Rename kopiert die Datei einfach mit der Endung .md5err und die Originaldatei bleibt bestehen! Ok, habe ich mir gedacht, machst über Umweg: erst copy, dann unlink, aber die Originaldatei lässt sich mit nichts löschen! Über den Explorer kann ich die Datei Problemlos löschen, während das Script läuft habe ich auch keine Dateihandles offen. Was mache ich falsch? Wie kann ich eine Datei übers Netzwerk "rename"´en?
GwenDragon
 2008-03-06 09:02
#106746 #106746
User since
2005-01-17
14549 Artikel
Admin1
[Homepage]
user image
Sowas geht doch:
Code (perl): (dl )
1
2
3
4
5
6
7
#!/usr/bin/perl
use strict;
use warnings;
my $unc_z = '\\\DEV\x$';
my $temp = '\tmp';
my $file_name = $unc_z . $temp .'\ht.txt';
rename ($file_name, $file_name. '.md5err') or die ("$!: $file_name");


Du escapest einfach nur zu viel in deinen Strings. ;)

Aber rename kopiert nicht, sondern benennt um.
Willst du nun kopieren oder umbenennen?

Kopieren geht so:
Code (perl): (dl )
1
2
3
4
5
6
7
8
#!/usr/bin/perl
use strict;
use warnings;
use File::Copy;
my $unc_z = '\\\DEV\x$';
my $temp = '\tmp';
my $file_name = $unc_z . $temp .'\ht.txt';
copy( $file_name, $file_name. '.md5err') or die ("$!: $file_name");

die Drachin, Gwendolyn


Unterschiedliche Perl-Versionen auf Windows (fast wie perlbrew) • Meine Perl-Artikel

Gast Gast
 2008-03-06 11:34
#106748 #106748
So, hab jetzt mein Passwort nicht im Kopf, schreibe daher mal als Gast und nicht als oes:

Also, ich hatte auch daran gedacht, ob ich nicht vielleicht zuviel escape habe, daher habe ich auch andere Schreibweisen ausprobiert, ohne Erfolg.

Also, ich will umbenennen, benutze rename, aber rename kopiert die Datei und lässt die originale einfach bestehen. Das liegt sicher daran, dass ich die Datei warum auch immer, mit meiner Syntax nicht löschen kann. Probier meinen Codeschnipsel mal aus, dann wirst Du höchstwahrscheinlich auf das gleiche Ergebnis kommen. Kanns ja als unc-Pfad die IP Deines lokalen Rechners nehmen.
GwenDragon
 2008-03-06 11:57
#106749 #106749
User since
2005-01-17
14549 Artikel
Admin1
[Homepage]
user image
Hast du strict und warnings aktiviert?

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

#$unc_z ergibt z.B. \\192.168.0.20\c$\\
#$file_name wäre \\192.168.0.20\c$\datei.txt

my $unc_z="\\\\192.168.50.1\\x\$\\";
my $temp='datei';
my $hsh_key='txt';
my $file_name="$unc_z$temp.$hsh_key";
rename ($file_name, $file_name."\.md5err");

Benennt bei mir korrekt über das Netzwerk die Datei Datei.txt in Datei.md5err um.

Was hast denn du für ein Netzwerk am laufen?
Irgendeinen Fileserver?
die Drachin, Gwendolyn


Unterschiedliche Perl-Versionen auf Windows (fast wie perlbrew) • Meine Perl-Artikel

moritz
 2008-03-06 12:34
#106750 #106750
User since
2007-05-11
923 Artikel
HausmeisterIn
[Homepage]
user image
Eventuell mal mit File::Copy::move probieren.
Gast Gast
 2008-03-06 12:59
#106751 #106751
Verdamm mich in die Ecke ... wenns bei Dir einwandfrei funktioniert ist bei mir irgendwo irgendein Byte falsch. Ist aber gut zu wissen, dass es Dir funktioniert, dann muss ich halt schauen was ich falsch mache. strict und warnings sind immer aktiviert.
Gast Gast
 2008-03-06 13:17
#106754 #106754
"rename" schreibt seine fehler in "$!" frag das doch mal ab
oes
 2008-03-07 00:13
#106764 #106764
User since
2008-02-26
11 Artikel
BenutzerIn
[default_avatar]
Problem gelöst, musste aber viel probieren:

Die Situation:
Die umzubenennende Datei, wird auf den Zielrechner KOPIERT (copy). Dann kontrolliere ich durch eine md5-Prüfsumme ob die Datei fehlerfrei kopiert worden ist. Wenn keine unterschiede in der Prüfsumme, dann wird die Quelldatei gelöscht. Bei unterschieden in der Prüfsumme, soll die Zieldatei in *.md5_err umbenannt werden und die Quelldatei bleibt.

Das funktioniert so nicht!

rename ($zieldatei, "$zieldatei.md5_err") erstellt eine Kopie von $zieldatei als "$zieldatei.md5_err" und lässt $zieldatei einfach stehen. Also kein wirkliches "rename", sondern wirklich nur eine Art "copy".

Meine Lösung:
Ich erstelle zunächst eine Kopie der Quelldatei. Dann benutze ich "move" zum Zielrechner und siehe da: rename funtioniert wie erwartet.

Merke:
Mit copy verschobene Dateien können nicht sofort "renamed" werden.
Mich hats fast zur Weißglut gebracht. Sad but true.

moritz
 2008-03-07 12:05
#106779 #106779
User since
2007-05-11
923 Artikel
HausmeisterIn
[Homepage]
user image
rename hat einige Einschränkungen, es funktioniert z.B. nicht über Dateisystemgrenzen hinweg. Weshalb ich ja auch gleich move vorgeschlagen habe ;-)
<< >> 9 Einträge, 1 Seite



View all threads created 2008-03-06 00:28.