Beefy Boxes and Bandwidth Generously Provided by pair Networks
go ahead... be a heretic
 
PerlMonks  

Re^5: Rename unreliable on Windows

by tobyink (Canon)
on Apr 04, 2012 at 12:06 UTC ( [id://963431]=note: print w/replies, xml ) Need Help??


in reply to Re^4: Rename unreliable on Windows
in thread Rename unreliable on Windows

is there an easy workaround (apart from disabling the backup sw)?

You could just keep trying to rename it...

1 until rename $file1, $file2;

Of course, if a file can genuinely never be renamed, this will cause your script to keep trying forever. Better to limit to a finite number of attempts at renaming.

my $attempts; while (not rename $file1, $file2) { $attempts++; die "Could not rename file: $!" if $attempts > 7; sleep $attempts; }
perl -E'sub Monkey::do{say$_,for@_,do{($monkey=[caller(0)]->[3])=~s{::}{ }and$monkey}}"Monkey say"->Monkey::do'

Replies are listed 'Best First'.
Re^6: Rename unreliable on Windows
by MidLifeXis (Monsignor) on Apr 04, 2012 at 12:48 UTC

    You could also throw it into a queue of items "to deal with later".

    --MidLifeXis

Re^6: Rename unreliable on Windows
by elef (Friar) on Apr 04, 2012 at 16:22 UTC
    Thanks. Hoping that copying is more robust than renaming, I tried this:
    unlink "rename2.txt" or die "Can't delete file: $!"; copy ("rename1.txt", "rename2.txt") or die "Can't copy file: $!"; unlink "rename1.txt" or die "Can't delete file: $!";

    Errors became less frequent, but they're still there. I'll try your suggestion. I really like the idea of sleeping increasing intervals between attempts, too.

    -------------------
    Edit: did the test, and the solution works. I also added some reporting to see how many extra attempts are needed for the renamings to succeed. The second attempt was sufficient every time, and it was needed ~50 times before the script got to 10000 loops. I'll implement this with 5 attempts max (just in case the backup sw spends more time on larger files) and forget about the issue. Thanks.

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://963431]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others imbibing at the Monastery: (5)
As of 2024-04-23 21:49 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found