Лучший способ рекурсивного поиска всех файлов (REST API) - PullRequest
0 голосов
/ 08 марта 2012

У меня есть два класса в моей оболочке REST API: Wrapper::Folder и Wrapper::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 голосов
/ 08 марта 2012

Не проверено, но это будет основной смысл рекурсивного решения. Возвращает массив имен файлов (с путями) и без каталогов.

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("/")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...