From: Neil Conway Date: 2001-02-24T12:10:33+09:00 Subject: [ruby-talk:11422] Dir#each -- include '.'? 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 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