2011-02-11 39 views
1

我想搜索一個具有特定名稱的文件,從當前工作目錄開始,並以便攜方式處理整個層次結構,直到到達根目錄或等效文件。如何可移植到Ruby中的目錄層次結構?

例如, Linux環境中,我知道我可以做

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

...但有沒有想合作一個更好的方式無論在哪裏父目錄結束的鏈條?

此外,重構是局部變量離開將是不錯,但我還沒有想出了一個好辦法呢。

回答

2

在幾乎所有環境下,"cd .."在目錄樹的根將等同於本身。所以,如果你升到一個級別,但在相同的目錄中,你就在根。

把它作爲你的while循環條件。

+0

正是我在找的,謝謝! – Ilkka 2011-02-11 13:35:01

+0

可能對某些人有用:我不得不使用Dir.chdir(「..」)(在Jenkins使用的耙文件中) – timhc22 2014-11-12 12:40:16

0

有沒有一種更好的方式,不管父目錄的鏈結束?

父目錄鏈除了在根目錄以外還會在哪裏結束?如果你想這樣想,驅動器的目錄結構就是一棵樹,或者倒轉的樹。 「根」目錄始終相同;這是儘可能低的,你可以去。

你的代碼是正確的。你可以採用其他方法,但我懷疑你會在清晰度或簡單性上獲得很多。你可能會發現更快的速度,但是可能會因爲速度上的微小差異而折中其他兩個,我懷疑你會注意到加速。

這不是特質Ruby代碼,即通常我們會使用一個數組,並迭代它以某種方式,但我不認爲這種做法多少你買在簡單或清潔的條款。

我給你90%和銀星。做得好。


編輯:

我喜歡的答案@約翰Feminella了。這是一種常識性的方式來確定您何時擊中了驅動器系統的根目錄,並且能夠很好地跨平臺工作。我想不出有什麼系統會給你一個隨機改變的根指定,所以循環直到目錄不再改變。