On Mac: File.file? behaves strangely

Discussion in 'Ruby' started by Ronald Fischer, Jan 1, 2011.

  1. 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?
     
    Ronald Fischer, Jan 1, 2011
    #1
    1. Advertisements

  2. 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.
     
    Jesús Gabriel y Galán, Jan 1, 2011
    #2
    1. Advertisements

  3. entry is relative to the dir, while File.file? works relative to the
    Of course!!!! I could have seen it myself from the output of my test
    program. Stupid me!! Thanks for pointing this out!


    Ronald
     
    Ronald Fischer, Jan 2, 2011
    #3
    1. Advertisements

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments (here). After that, you can post your question and our members will help you out.