Why is File.Move method Not Found?

Ok so I am looking at this api :

http://www.ruby-doc.org/core-1.8.6/classes/File.html#M002608

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.