Ruby FileUtils.move Errno :: EACCES:Windows上的权限被拒绝

时间:2016-07-13 04:33:04

标签: ruby windows

如何使用Ruby在Windows上移动文件?查看documentation,看起来它应该与FileUtils.move一起使用。这在Windows 10上对我不起作用。

irb(main):001:0> RUBY_VERSION
=> "2.3.0"
irb(main):002:0> require 'fileutils'
=> true
irb(main):003:0> FileUtils.mkdir("first_directory")
=> ["first_directory"]
irb(main):004:0> FileUtils.mkdir("second_directory")
=> ["second_directory"]
irb(main):005:0> FileUtils.touch(File.join("first_directory", "test_file"))
=> ["first_directory/test_file"]
irb(main):006:0> file = File.new(File.join("first_directory", "test_file"))
=> #<File:first_directory/test_file>
irb(main):007:0> FileUtils.move(file, "second_directory")
Errno::EACCES: Permission denied @ rb_file_s_rename - (first_directory/test_file, second_directory/test_file)
        from C:/ruby/23-x64/lib/ruby/2.3.0/fileutils.rb:528:in `rename'
        from C:/ruby/23-x64/lib/ruby/2.3.0/fileutils.rb:528:in `block in mv'
        from C:/ruby/23-x64/lib/ruby/2.3.0/fileutils.rb:1571:in `block in fu_each_src_dest'
        from C:/ruby/23-x64/lib/ruby/2.3.0/fileutils.rb:1585:in `fu_each_src_dest0'
        from C:/ruby/23-x64/lib/ruby/2.3.0/fileutils.rb:1569:in `fu_each_src_dest'
        from C:/ruby/23-x64/lib/ruby/2.3.0/fileutils.rb:517:in `mv'
        from (irb):5
        from C:/ruby/23-x64/bin/irb.cmd:19:in `<main>'

这是一个已知的限制吗?还是一个bug?或者我只是做错了什么?谷歌搜索为Linux系统产生chmod结果,但我认为这与Windows无关(无论如何都以管理员身份运行脚本)。

1 个答案:

答案 0 :(得分:3)

事实证明问题是file = File.new(File.join("first_directory", "test_file"))。这实际上会打开文件,该文件会阻止重命名操作(这是移动的执行方式),因为文件当前正在使用&#34;正在使用&#34;。删除此行并使用文件路径而不是FileUtils.move中的对象可以正常工作。

通过创建文件对象,然后尝试在资源管理器中重命名该文件,可以类似地观察到这一点:The action can't be completed because the file is open in ruby.exe...