Hi all,

I'm still a Ruby-newbie, so if this is silly, just tell me.

I'm using Dir#each to recurse through the files in a directory.
To me, the following code is fairly natural:

#####
#examines the specified file; if it is valid, it adds the file
#to the specified array
def process_file(file, array)
    #checks on each file
    return unless File.exists?(file)
    return unless File.readable?(file)
    #checks on directories: recurse, or just ignore them
    if (File.directory?(file))
        return unless $RECURSIVE
        dir = Dir.new(file)
        dir.each {|f| process_file(f, array) }
    end
    #okay, the file has passed all the tests, so add it to the array
    array.push(file)
end
#####

($RECURSIVE is a boolean global variable).

The problem with this is that Dir#each includes "." (and ".."). So
this code goes into an infinite loop, and eventually causes a
"too many open files" error. To avoid this, I suppose I'd need
to do some checking for special cases, and ignore "." and ".." --
except this seems kinda clumsy to me. I think that another
method for Dir would be justified: like #each, except it doesn't
include "." and ".."

Call it Dir#all_files or something...

Does anyone else think this would be a good idea? Or is there
a better way to solve my problem?

Thanks in advance,

Neil

-- 
Neil Conway <neilconway / home.com>
Get my GnuPG key from: http://klamath.dyndns.org/mykey.asc
Encrypted mail welcomed

If you wish to strive for peace of soul then believe;
if you wish to be a devotee of truth, then inquire.
        -- Friedrich Nietzsche