Beefy Boxes and Bandwidth Generously Provided by pair Networks
XP is just a number
 
PerlMonks  

Re: Re: Re: Re: File::Copy dying on Win2k when target file already there

by scain (Curate)
on Jan 17, 2003 at 15:58 UTC ( #227704=note: print w/ replies, xml ) Need Help??


in reply to Re: Re: Re: File::Copy dying on Win2k when target file already there
in thread File::Copy dying on Win2k when target file already there

John,

I did as you suggested and it works well. The readdir/while loop in the code above now looks like this:

opendir PLUGINS, "conf/plugins" or die "unable to opendir ./conf/plugi +ns\n"; while (my $pluginfile = readdir(PLUGINS) ) { my $localfile = Bio::Root::IO->catfile('conf/plugins',$pluginfile) +; if (-f $localfile) { my $installfile = Bio::Root::IO->catfile($plugindir, $pluginfi +le); chmod (0666, $installfile); copy($localfile, $installfile) or die "$localfile unable to copy to $installfile : $!\n"; chmod (0444, $installfile); } } closedir PLUGINS;
The only caveat being that I had to chmod the files to 444 (readonly by everyone, including the owner (root in this case)). It is fine for Windows, but an annoyance on unix. I would have preferred 644 (writeable by the owner), but on Windows, that is the same as world writeable (from Perl's chmod perspective).

(I hate having to type :w and then :w! when I am reminded once again that the file is readonly.)

Thanks,

Scott
Project coordinator of the Generic Model Organism Database Project


Comment on Re: Re: Re: Re: File::Copy dying on Win2k when target file already there
Download Code
Re: Re: Re: Re: Re: File::Copy dying on Win2k when target file already there
by John M. Dlugosz (Monsignor) on Jan 17, 2003 at 16:48 UTC
    I guess the chmod on Windows is using the "word" write bit as the single read-only flag.

    You could conditionally note the value to use, once:

    use constant ROFLAG => $^O eq 'MSWin32' ? 0444 : 0644;
    and then use that constant in your code.

    I don't know what you mean about typing :w.

    —John

Re: Re: Re: Re: Re: File::Copy dying on Win2k when target file already there
by Aristotle (Chancellor) on Jan 18, 2003 at 15:33 UTC
    First of all, in reply to John M. Dlugosz, please don't use eq: use constant ROFLAG => $^O =~ /win32/i ? 0444 : 0644;

    There is too much legacy code that does so already. If everyone used a regex $^O could be changed to contain more details about the exact version of Windows.

    However, this solution strikes me as an ugly hack anyway. How about this?

    chmod +(stat)[2] | 0444, $_ for $installfile;

    Makeshifts last the longest.

Log In?
Username:
Password:

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

How do I use this? | Other CB clients
Other Users?
Others about the Monastery: (3)
As of 2015-07-05 09:30 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









    Results (61 votes), past polls