2016-07-13 7 views
2

Rubyを使用してWindows上でファイルをどのように移動しますか? documentationを見ると、FileUtils.moveと同じように見えます。これはWindows 10で私にとってはうまくいきません。Ruby FileUtils.move Errno :: EACCES:Windowsでのアクセスが拒否されました

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>' 

これは既知の制限ですか?バグですか?それとも、何か間違っているだけですか?グーグルではLinuxシステムではchmodの結果が出るが、Windowsには関係ないと思う(管理者としてのスクリプトの実行に関係なく)。

答えて

1

問題が判明したのはfile = File.new(File.join("first_directory", "test_file"))でした。これは実際にファイルを開き、ファイルが現在「使用中」であるため、名前変更操作(移動がどのように実行されるか)をブロックします。この行を削除し、FileUtils.moveでオブジェクトの代わりにファイルパスを使用すると、正常に動作します。

これは、ファイルオブジェクトを作成し、エクスプローラでファイルの名前を変更することで同様に確認できます。The action can't be completed because the file is open in ruby.exe...

関連する問題