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