递归显示所有子文件夹的内容

时间:2015-01-18 20:49:15

标签: ruby-on-rails ruby

我目前有filenames.html.erb文件,其中包含:

<ul style ="list-style-type:none">
    <% for file in @files %>
   <li>
        file name is: <%= file %>
  </li> 
    <% end %>
<ul>

我对routes.rb进行了必要的更改,并向控制器添加了def方法。

现在,它将列出当前目录中的所有文件,但是如何编写一个显示当前目录中所有子文件夹内容的方法?

1 个答案:

答案 0 :(得分:0)

Ruby有两种简单的方法来显示递归文件列表。您将尝试与他们合作并决定哪种更适合您的需求:

Ruby的Find类有一个很好的例子,展示了如何以递归方式下降到目录层次结构。

Ruby的Dir类可以在文件下载到文件夹时返回文件列表,但您必须解析该列表。 Dir的foreach将迭代地向您返回文件,这与Find返回的类似。在任何一种情况下,使用目录名**来表示您希望Ruby开始深入研究的位置。

例如,我创建了一组简单的嵌套文件夹,如:

foo
├── bar
│   └── baz2.txt
└── baz.txt

如果我cd到“foo”目录并启动IRB:

>> Dir['./**/*']
[
    [0] "./foo",
    [1] "./foo/bar",
    [2] "./foo/bar/baz2.txt",
    [3] "./foo/baz.txt"
]

Dir['./**/*']返回了一系列路径。 foreach将返回相同的列表,但一次只返回一个条目。

无论哪种方式,都由您决定如何表示该层次结构。简单地将文件丢回给用户可能会导致用户界面不良。

此外,您需要添加适当的代码来过滤掉因任何原因应隐藏的文件。