On 21.09.2006 11:06, Newbie wrote:
> def traverse(root)
>   Dir.foreach(root) do |file|
>     next if file[0] == ?.
>     puts file
>     traverse(root + '\\' + file) if File.directory?(root + '\\' + file)
>   end
> end
> 
> This is my initial attempt. Two things feel rather wrong:
> 1) Is there a simpler way to test the beginning of a string? A 
> startsWith?(aString) like method?

Like this?
next if /^\./ =~ file

> 2) I'm iterating through filenames, then appending the path each time. 
> Is there a way to get a collection of File objects from a directory?

File objects are for actually reading and writing objects.  You can do 
Dir["*"] which returns an array of strings.

> Any other pointers to where I could improve would also be greatly 
> appreciated.

Use Find:

irb(main):001:0> require 'find'
=> true
irb(main):002:0> Find.find('.') {|f| puts f}
.
./x
./prj-jar.txt
./jdk-jar.txt
=> nil

irb(main):005:0> Find.find('/tmp') {|f| puts f}
/tmp
/tmp/x
/tmp/prj-jar.txt
/tmp/jdk-jar.txt
=> nil

irb(main):008:0> Find.find '/tmp' do |f|
irb(main):009:1* next if File.directory? f
irb(main):010:1> puts f
irb(main):011:1> end
/tmp/x
/tmp/prj-jar.txt
/tmp/jdk-jar.txt

Note, you can also use File.join to portably combine paths.

Kind regards

	robert