Getting all directories in a specified directory

Hello everyone

I'm trying to make a "directory chooser" for a form, so that the user can choose a subdirectory (via dropdown) of a specified root directory (under public/images) on the server. Sooo... how do I get an array or a hash of all the subdirectories in a specified directories? And: how can I then get an array or a hash of all the files that are in that subdir?

Thanks a lot! al

Try this:

def parse_dir(path)    dirs, files = ,    Dir.entries(path).each do |p|      dirs << p if File.directory?(p)      files << p if File.file?(p)    end    dirs[0...2] = # removes '.' and '..' directories (if on UNIX)    [dirs,files] end

directories, files = parse_dir(some_path)

Call additional times with a new path to get subdirectory information.

cr

Hi

Sorry if this is coming to the list a second time...

I'm new to Ruby on Rails and also new here, so apologies if this is something obvious I'm missing.

I'm also trying to list the contents of a directory and separate them into files and dirs. The ruby script I've written, as well as the one here, both work fine when run from the terminal. However, when I try to use either in Rails, the app only recognizes .. and . as directories and .DS_Store as a file, even though it can list the complete contents of the directory.

Any thoughts? Thanks for any help.

cheers dafydd

dafydd wrote:

I'm also trying to list the contents of a directory and separate them into files and dirs. The ruby script I've written, as well as the one here, both work fine when run from the terminal. However, when I try to use either in Rails, the app only recognizes .. and . as directories and .DS_Store as a file, even though it can list the complete contents of the directory.

Perhaps this code snippet will help. Also try logging/outputting the result of Dir.pwd, i.e. where is your current working directory under each circumstance?

class Dir   def self.crawl( path, max_depth=nil, include_directories=false, depth=0, &block )     return if max_depth && depth > max_depth     begin       if File.directory?( path )         yield( path, depth ) if include_directories         files = Dir.entries( path ).select{ |f| f[0,1]!='.' }         unless files.empty?           files.collect!{ |file_path|             Dir.crawl( path+'/'+file_path, max_depth, include_directories, depth+1, &block )           }.flatten!         end         return files       else         yield( path, depth )       end     rescue SystemCallError => the_error       warn "ERROR: #{the_error}"     end   end

end

Hey thanks!

I have to admit the code snippet is a bit beyond my grasp at the moment, and I'm gonna have to spend some time figuring it out, but in the meantime I followed your current directory tip and taht fixed the trouble. As far as I can figure, I needed to actually bbe working in the directory - it wasn't enough to just provide the pathname.

Thanks again.

cheers dafydd