How to force a copy over a read-only file

I want to copy a folder over an existing one. Some files are read-only.
When I do it I get the following error:

C:/Ruby/lib/ruby/1.8/fileutils.rb:1246:in `initialize’: Permission
denied - Folder2/./coco.txt (Errno::EACCES)

The Folder2/./coco.txt file is read-only

Here is the code:

require ‘fileutils’
include FileUtils::Verbose

cp_r(‘Folder1/.’,‘Folder2’)

Does anybody has an idea how I can fix this ? I tried the :force option
and it looks like it’s not supported.

Note: I am on a Windows platform.

Thanks in advance

On Jan 14, 2008 5:45 PM, Martin M. [email protected] wrote:

require ‘fileutils’
Thanks in advance

Posted via http://www.ruby-forum.com/.

You need to change the permissions, either via the operating system
(independently from your script) or do it in your script before you
copy.


“Hey brother Christian with your high and mighty errand, Your actions
speak
so loud, I can’t hear a word you’re saying.”

-Greg Graffin (Bad Religion)

Glen H. wrote:

On Jan 14, 2008 5:45 PM, Martin M. [email protected] wrote:

require ‘fileutils’
Thanks in advance

Posted via http://www.ruby-forum.com/.

You need to change the permissions, either via the operating system
(independently from your script) or do it in your script before you
copy.


I thought about this solution, but in fact I don’t want to change the
state of the other files that are in the destination location.
If I want to do that I need to do something like:

require ‘pathname’
require ‘fileutils’

include FileUtils::Verbose

def cp_rf(src, dest)
src_files = Dir[File.join(src, ‘**/.’)]
src_files.each do |src_file|
rel_path_src =
Pathname.new(src_file).relative_path_from(Pathname.new(src))
dest_file = dest + rel_path_src
dest_dirname = File.dirname(dest_file)
mkdir(dest_dirname) unless File.exist?(dest_dirname)
if ( File.exist?(dest_file.to_s) &&
!File.writable?(dest_file.to_s))
File.chmod(0664, dest_file)
end
cp(src_file, dest_file)
end
end

I there a more easier way to do that. Because It is much more easier to
write:
system(“xcopy c:\temp c:\temp2 /e /r /Y”)

I feel that the FileUtils module is not complete.