尝试将共享文件复制到Ruby中的本地驱动器时权限被拒绝

时间:2013-12-20 17:34:04

标签: ruby

这是我非常基本的复制代码:

require 'fileutils'
FileUtils.copy_file("\\\\winmomfs1\\3rdParty\\Oracle Client\\Oracle_11gR2\\win64_11gR2_client.zip","c:\\chef-tmp")

这是我得到的错误:

C:\Users\ctote\Desktop>ruby cp.rb C:/opscode/chef/embedded/lib/ruby/1.9.1/fileutils.rb:1371:in `initialize': Permission denied - c:/chef-tmp (Errno::EACCES)
        from C:/opscode/chef/embedded/lib/ruby/1.9.1/fileutils.rb:1371:in `open'
        from C:/opscode/chef/embedded/lib/ruby/1.9.1/fileutils.rb:1371:in `block in copy_file'
        from C:/opscode/chef/embedded/lib/ruby/1.9.1/fileutils.rb:1370:in `open'
        from C:/opscode/chef/embedded/lib/ruby/1.9.1/fileutils.rb:1370:in `copy_file'
        from C:/opscode/chef/embedded/lib/ruby/1.9.1/fileutils.rb:477:in `copy_file'
        from cp.rb:2:in `<main>'

我做错了什么?我可以通过资源管理器手动复制这些文件,所以我认为这不是权限。

2 个答案:

答案 0 :(得分:2)

我认为您应该使用FileUtils::cp_r并编写如下代码:

require 'fileutils'

FileUtils.cp_r("\\\\winmomfs1\\3rdParty\\Oracle Client\\Oracle_11gR2\\win64_11gR2_client.zip","c:\\chef-tmp")

看这篇文章 - Ruby-FileUtils copy_file Permission denied on Windows

答案 1 :(得分:0)

阅读本文,它来自the documentation for IO

  如果可能,Ruby将在不同的操作系统约定之间转换路径名。例如,在Windows系统上,文件名“/gumby/ruby/test.rb”将打开为“\ gumby \ ruby​​ \ test.rb”....

它解决了这个问题:

FileUtils.copy_file("\\\\winmomfs1\\3rdParty\\Oracle Client\\Oracle_11gR2\\win64_11gR2_client.zip","c:\\chef-tmp")

然后把它变成:

FileUtils.copy_file("//winmomfs1/3rdParty/Oracle Client/Oracle_11gR2/win64_11gR2_client.zip", "c:/chef-tmp")