On Mac: File.file? behaves strangely

Or, rather, I probably just made a silly mistake which I can't see
(because I had a long break since I wrote my last Ruby program). Please
have a look at this program:

#!/usr/local/bin/ruby
dir=ARGV[0] or raise "Which directory?";
puts "Opening:"+dir
Dir.foreach(dir) { |entry|
  puts entry
  if(File.file?(entry))
    puts "is a file"
  end
}

No matter which directory on Max OSX 10.4 I try this out, it lists all
entries in the directory, but only for the entry ".DS_Store" (which
exists on the Mac automatically in every sub-directory), it prints out
"is a file". It is as if the other directory entries would be no
(regular) files.

What did I do wrong?

···

--
Posted via http://www.ruby-forum.com/.

entry is relative to the dir, while File.file? works relative to the
working directory. Try this:

irb(main):016:0> Dir.foreach(dir) do |entry|
irb(main):017:1* p entry
irb(main):018:1> p File.file? entry
irb(main):019:1> p File.file?("#{dir}/#{entry}")
irb(main):020:1> end

Jesus.

···

On Sat, Jan 1, 2011 at 6:41 PM, Ronald Fischer <rovf_via_ruby_forum@fusshuhn.de> wrote:

Or, rather, I probably just made a silly mistake which I can't see
(because I had a long break since I wrote my last Ruby program). Please
have a look at this program:

#!/usr/local/bin/ruby
dir=ARGV[0] or raise "Which directory?";
puts "Opening:"+dir
Dir.foreach(dir) { |entry|
puts entry
if(File.file?(entry))
puts "is a file"
end
}

No matter which directory on Max OSX 10.4 I try this out, it lists all
entries in the directory, but only for the entry ".DS_Store" (which
exists on the Mac automatically in every sub-directory), it prints out
"is a file". It is as if the other directory entries would be no
(regular) files.

What did I do wrong?

entry is relative to the dir, while File.file? works relative to the
working directory.

Of course!!!! I could have seen it myself from the output of my test
program. Stupid me!! Thanks for pointing this out!

Ronald

···

--
Posted via http://www.ruby-forum.com/\.