Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]5962[/thread]

Wenn Datei existiert: Dateinamen ändern

Leser: 3


<< >> 3 Einträge, 1 Seite
pktm
 2003-12-10 20:26
#75441 #75441
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
Hallo!
Ich kopiere in einem Script eine Datei von A nach B.
Dabei soll sichergestellt werden, das keine Dateien überschrieben werden.
Stattdessen soll eine andere Datei mit einer Zahl vor dem suffix angelegt werden.
Das sieht bei mir bislang so aus:
Code: (dl )
1
2
3
4
5
6
7
8
9
my $file = 'c:/test.txt';
my $trashDir = 'd:/anotherdir';
my $dest = $trashDir . '/' . basename("$file",".igs") . '.igs';
my $cnt = 2;
while( -e $dest || $cnt != MAXTRASHCOPYS ){
$dest = basename("$dest",".igs") . $cnt . '.igs';
$cnt++;
}
unless( copy("$file","$dest") ){ die "Konnte keine Sicherheitskopie erstellen!"; }

Mein Problem:
Es geht nicht.
Fehlermeldungen erhalte ich keine, aber gleichnamige Dateien werden überschrieben.
Kann mir da wer weiterhelfen?
Also wenn die Datei bereits existiert soll einfach eine gleichnamige Datei nur mit einer anderen Zahl vorm Suffix erstellt werden.
mfg pktm
http://www.intergastro-service.de (mein erstes CMS :) )
Strat
 2003-12-10 20:38
#75442 #75442
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
mit -e ueberprueft man, ob es irgendwas dieses namens gibt
mit -f ueberprueft man, ob es eine Datei dieses namens gibt

|| hat eine hoehere prioritaet als or. teste mal:
while (-f $dest or $cnt != MAXTRASHCOPYS) {

was kommt heraus, wenn du dir ein paar debugginginfos mehr ausgeben laesst, z.B. $dest in der while-schleife?
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
Dubu
 2003-12-11 20:30
#75443 #75443
User since
2003-08-04
2145 Artikel
ModeratorIn + EditorIn

user image
[quote=pktm,10.12.2003, 19:26]
Code: (dl )
            while( -e $dest || $cnt != MAXTRASHCOPYS ){
[/quote]
Falshce Logik. Die Schleife wird erst beendet, wenn die komplette Bedingung false ist, also die Zieldatei nicht existiert und $cnt == MAXTRASHCOPYS ist.

Mein Vorschlag:
Code: (dl )
1
2
3
4
while( -e $dest && $cnt < MAXTRASHCOPYS ) {
   # ...
}
# kopiere

oder, wenn die Datei mit der groessten Nummer nicht ueberschrieben werden soll:
Code: (dl )
1
2
3
4
5
6
7
while( -e $dest  ){
   # ...
}

if ($cnt < MAXTRASHCOPYS) {
  # kopiere
}
<< >> 3 Einträge, 1 Seite



View all threads created 2003-12-10 20:26.