如何在Ruby中可移植地通过目录层次结构?

时间:2011-02-11 11:32:06

标签: ruby

我想从当前工作目录开始搜索具有特定名称的文件,并以可移植的方式在层次结构中进行处理,直到我到达根目录或等效名称。

例如Linux环境,我知道我可以做到

dir = '.'
while File.expand_path(dir) != '/' do
    <check for the file>
    dir = File.join dir, '..'
end

...但是,无论父目录链的哪里结束,有没有更好的方法可以正常工作?

此外,重构那个局部变量会很好但我还没有想出一个好的方法。

2 个答案:

答案 0 :(得分:2)

在几乎所有环境中,目录树根目录的"cd .."都与自身相同。所以,如果你上升到一个级别但最终在相同的目录中,那么你就是根。

将您的条件设为while圈。

答案 1 :(得分:0)

  

是否有一种更好的方式,无论父目录链的结束位置如何都能正常工作?

父目录链在哪里结束而不是在根目录?驱动器的目录结构是树或倒置树,如果你想这样想的话。 “root”目录总是一样的;它尽可能低。

你的代码很好。你可以采取其他方式,但我怀疑你在清晰度或简洁性方面获得了很多。你可能会找到更快的东西,但可以通过其他两个来换取速度上的微小差异,我怀疑你是否注意到加速。

这不是特殊的Ruby代码,也就是说,通常我们会使用一个数组并以某种方式迭代它但我没有看到这种做法在简单性或清洁度方面给你带来太大的影响。

我给你90%和银星。干得好。


编辑:

我喜欢@John Feminella给出的答案。这是一种常识性的方法,可以确定何时触及驱动系统的根,并且可以很好地跨平台工作。我想不出任何会给你一个随机改变的根名称的系统,所以循环直到目录不再改变。

相关问题