递归查找所有文件的最佳方法(REST API)

时间:2012-03-08 13:31:31

标签: ruby recursion

我的REST API包含程序中有两个类:Wrapper::FolderWrapper::File。每个文件夹可以包含许多文件夹和文件。文件夹的内容可以通过.list.类方法重新获得。

我想为.all实现Wrapper::File类方法,该方法将返回所有文件夹中所有文件的数组。

以下方法不起作用,但会显示我想要的内容。

class Wrapper::File
  def self.all
    folders = Wrapper::Folder.list('/')
    files = []
    while folders.size > 0
      folders.each do |object|
        if object.is_a?(Wrapper::Folder)
          folders = Wrapper::Folder.list('/')
        else
          files << object
        end
      end
    end
  end
end

1 个答案:

答案 0 :(得分:0)

未经测试,但这将是递归解决方案的基本要点。将返回一个文件名数组(带路径)和没有目录。

def getFilesRecursive(path)

   # create our directory object and file list storage
   d = Dir.new(path)
   l = Array.new

   # iterate over our given directory
   d.each do |f|

     # exclude . and ..
     if !(f =~ /$[\.]{1,2}^/)

       # recurse on a directory
       if File.directory?(f)
         l += getFilesRecursive(path + f)

       # store on a file
       else
         l.push(path + f)
       end

     end # if not . or ..

   end # Dir.each

   # return our list of files
   return l

end # getFlesRecursive()

# let's get some files!
files = getFilesRecursive("/")