Why is File.Move method Not Found?

Ok so I am looking at this api :

and I am trying to use the move method here :

      File.open(movefrompath, "wb")       File.move(movefrompath ,movetopath, true)

NoMethodError (undefined method `move' for File:Class):     /app/controllers/messages_controller.rb:47:in `loadMessages'     c:/ruby/lib/ruby/1.8/find.rb:39:in `find'     c:/ruby/lib/ruby/1.8/find.rb:38:in `catch'     c:/ruby/lib/ruby/1.8/find.rb:38:in `find'     /app/controllers/messages_controller.rb:32:in `loadMessages'     /app/controllers/messages_controller.rb:23:in `loadFilesFromDir'     /app/controllers/messages_controller.rb:8:in `index'     c:/ruby/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_controller/base.rb:1158:in `send'     c:/ruby/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_controller/base.rb:1158:in `perform_action_without_filters'     c:/ruby/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_controller/filters.rb:697:in `call_filters'     c:/ruby/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_controller/filters.rb:689:in `perform_action_without_benchmark'     c:/ruby/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_controller/benchmarking.rb:68:in `perform_action_without_rescue'     c:/ruby/lib/ruby/1.8/benchmark.rb:293:in `measure'     c:/ruby/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_controller/benchmarking.rb:68:in `perform_action_without_rescue'     c:/ruby/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_controller/rescue.rb:199:in `perform_action_without_caching'     c:/ruby/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_controller/caching.rb:678:in `perform_action'     c:/ruby/lib/ruby/gems/1.8/gems/activerecord-2.0.2/lib/active_record/connection_adapters/abstract/query_cache.rb:33:in `cache'     c:/ruby/lib/ruby/gems/1.8/gems/activerecord-2.0.2/lib/active_record/query_cache.rb:8:in `cache'     c:/ruby/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_controller/caching.rb:677:in `perform_action'     c:/ruby/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_controller/base.rb:524:in `send'     c:/ruby/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_controller/base.rb:524:in `process_without_filters'     c:/ruby/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_controller/filters.rb:685:in `process_without_session_management_support'     c:/ruby/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_controller/session_management.rb:123:in `process'     c:/ruby/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_controller/base.rb:388:in `process'     c:/ruby/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_controller/dispatcher.rb:171:in `handle_request'     c:/ruby/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_controller/dispatcher.rb:115:in `dispatch'     c:/ruby/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_controller/dispatcher.rb:126:in `dispatch_cgi'     c:/ruby/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_controller/dispatcher.rb:9:in `dispatch'     c:/ruby/lib/ruby/gems/1.8/gems/mongrel-1.1.4-x86-mswin32-60/bin/../lib/mongrel/rails.rb:76:in `process'     c:/ruby/lib/ruby/gems/1.8/gems/mongrel-1.1.4-x86-mswin32-60/bin/../lib/mongrel/rails.rb:74:in `synchronize'     c:/ruby/lib/ruby/gems/1.8/gems/mongrel-1.1.4-x86-mswin32-60/bin/../lib/mongrel/rails.rb:74:in `process'     c:/ruby/lib/ruby/gems/1.8/gems/mongrel-1.1.4-x86-mswin32-60/lib/mongrel.rb:159:in `process_client'     c:/ruby/lib/ruby/gems/1.8/gems/mongrel-1.1.4-x86-mswin32-60/lib/mongrel.rb:158:in `each'     c:/ruby/lib/ruby/gems/1.8/gems/mongrel-1.1.4-x86-mswin32-60/lib/mongrel.rb:158:in `process_client'     c:/ruby/lib/ruby/gems/1.8/gems/mongrel-1.1.4-x86-mswin32-60/lib/mongrel.rb:285:in `run'     c:/ruby/lib/ruby/gems/1.8/gems/mongrel-1.1.4-x86-mswin32-60/lib/mongrel.rb:285:in `initialize'     c:/ruby/lib/ruby/gems/1.8/gems/mongrel-1.1.4-x86-mswin32-60/lib/mongrel.rb:285:in `new'     c:/ruby/lib/ruby/gems/1.8/gems/mongrel-1.1.4-x86-mswin32-60/lib/mongrel.rb:285:in `run'     c:/ruby/lib/ruby/gems/1.8/gems/mongrel-1.1.4-x86-mswin32-60/lib/mongrel.rb:268:in `initialize'     c:/ruby/lib/ruby/gems/1.8/gems/mongrel-1.1.4-x86-mswin32-60/lib/mongrel.rb:268:in `new'     c:/ruby/lib/ruby/gems/1.8/gems/mongrel-1.1.4-x86-mswin32-60/lib/mongrel.rb:268:in `run'     c:/ruby/lib/ruby/gems/1.8/gems/mongrel-1.1.4-x86-mswin32-60/lib/mongrel/configurator.rb:282:in `run'     c:/ruby/lib/ruby/gems/1.8/gems/mongrel-1.1.4-x86-mswin32-60/lib/mongrel/configurator.rb:281:in `each'     c:/ruby/lib/ruby/gems/1.8/gems/mongrel-1.1.4-x86-mswin32-60/lib/mongrel/configurator.rb:281:in `run'     c:/ruby/lib/ruby/gems/1.8/gems/mongrel-1.1.4-x86-mswin32-60/bin/mongrel_rails:128:in `run'     c:/ruby/lib/ruby/gems/1.8/gems/mongrel-1.1.4-x86-mswin32-60/lib/mongrel/command.rb:212:in `run'     c:/ruby/lib/ruby/gems/1.8/gems/mongrel-1.1.4-x86-mswin32-60/bin/mongrel_rails:281     c:/ruby/lib/ruby/gems/1.8/gems/activesupport-2.0.2/lib/active_support/dependencies.rb:489:in `load'     c:/ruby/lib/ruby/gems/1.8/gems/activesupport-2.0.2/lib/active_support/dependencies.rb:489:in `load'     c:/ruby/lib/ruby/gems/1.8/gems/activesupport-2.0.2/lib/active_support/dependencies.rb:342:in `new_constants_in'     c:/ruby/lib/ruby/gems/1.8/gems/activesupport-2.0.2/lib/active_support/dependencies.rb:489:in `load'     c:/ruby/lib/ruby/gems/1.8/gems/rails-2.0.2/lib/commands/servers/mongrel.rb:64     c:/ruby/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:27:in `gem_original_require'     c:/ruby/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:27:in `require'     c:/ruby/lib/ruby/gems/1.8/gems/activesupport-2.0.2/lib/active_support/dependencies.rb:496:in `require'     c:/ruby/lib/ruby/gems/1.8/gems/activesupport-2.0.2/lib/active_support/dependencies.rb:342:in `new_constants_in'     c:/ruby/lib/ruby/gems/1.8/gems/activesupport-2.0.2/lib/active_support/dependencies.rb:496:in `require'     c:/ruby/lib/ruby/gems/1.8/gems/rails-2.0.2/lib/commands/server.rb:39     c:/ruby/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:27:in `gem_original_require'     c:/ruby/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:27:in `require'     ./script/server:3     -e:2:in `load'     -e:2

Rendering c:/ruby/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_controller/templates/rescues/layout.erb (internal_server_error)

the 'move' method appears to be an instance method so do

File.open(...) do |f|   f.move(...) end

It is already inside a Find.file do |f| method, does it need to be inside another Fil.open()?

I could not figure it out from the api or any extant examples of usage.

Thanks I will try that if my response doesnt change anything.

julian wrote:

From ruby-doc ->

"find(*paths) {|path| ...}

Calls the associated block with the name of every file and directory listed as arguments, then recursively on their subdirectories, and so on."

So, from that we can see that find yields the "name of every file" in the block. Therefore, it yields a String and not a File. Therefore, you do in fact still need to call File.open and then in another block do the move call. e.g.

Find.find("/path") do |file_name|   File.open(file_name) do |file_obj|     file_obj.move(...)   end end

The api can be a little deceiving at first, but you'll get used to it. Sometimes I might do the following to debug a situation like this:

Find.find("/path"){|f| puts f.class}

which will produce something like:

String String String ...

So you can see that the Find.find method is yielding strings and not actual file objects.

the 'move' method appears to be an instance method so do

File.open(...) do |f| f.move(...) end

Or use FileUtils which does have a non-instance move method.

Fred

Do you have a link to this ruby doc please? Now I can't seem to get File.exist to work. I am using it because it keeps giving an error that a certain directory exists ; there is no way of checking for existence of a directory I tried File.exist and (file.directory) but that is giving the same error : "method does not exist".

julian wrote:

Do you have a link to this ruby doc please? Now I can't seem to get File.exist to work. I am using it because it keeps giving an error
that a certain directory exists ; there is no way of checking for existence of a directory I tried File.exist and (file.directory) but that is giving the same error : "method does not exist".

http://www.ruby-doc.org/ :slight_smile: The method is File.exist? not File.exist

Fred

Did you have the file open at the time you called mv? I think you'd get that error if you did...

can you move the file without using ruby?

julian wrote:

can you move the file without using ruby?

I can move the file without using ruby (from windows explorer) how not using ruby.

I tried changing permissions on the file and the directory to which I am moving this file to but it keeps giving the error :

Permission denied C:/James/james-binary.../var/mail/inboxes/admin/archive Errno:EACCESS...

Currently reading the old posts on the error.

Ok no worries I just got it to work I was attempting to file."open" a directory that is why I was getting this error.

It was successfully able to move the file which is very cool. Thanks for all your help and sorry for the false alarm.