How to force a copy over a read-only file

M

Martin Martinos

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
 
G

Glen Holcomb

[Note: parts of this message were removed to make it a legal post.]

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
You need to change the permissions, either via the operating system
(independently from your script) or do it in your script before you copy.
 
M

Martin Martinos

Glen said:
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.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,766
Messages
2,569,569
Members
45,042
Latest member
icassiem

Latest Threads

Top