2011-09-12 82 views

回答

15

根據Ruby語言文檔,Dir.entries()不保證列出文件的任何特定順序,所以如果您需要某些命令,最好自己明確地執行它。

例如,如果你需要的文件修改的時間(最舊到最新)進行排序,你可以做到以下幾點:

Dir.entries('.').sort_by { |x| File.mtime(x) } 
+5

或'.sort_by {| a | File.stat(a).mtime}'來跳過一些'stat'調用。 –

+2

或'.sort_by {| a | File.mtime(a)}'跳過一些'File :: Stat'分配。 – cremno

8

我認爲沒有默認的排序順序,但您可以使用Dir.entries('some_path_to_dir').sort以ASC方式對它們進行排序。

+0

嗨..感謝這樣做。我問的原因是已經有一些代碼(在我的工作地點的系統中),它假定Dir.entries()將以特定順序(升序 - 最後修改日期)返回數據。所以,我不確定是否應該堅持或者改變它以確定訂單。 –

0

擴展在@maerics的回答,下面忽略. && ..,基於正則表達式過濾器,並根據需要選擇最新的文件。

Dir.chdir(in_dir) 
    target_file = Dir.entries(in_dir).select(|x| 
        x != '.' && 
        x != '..' && 
        x =~ /\somefile.txt\z/).sort_by{|f|File.mtime(f)}.last(1) 
    puts "here i am #{target_file}" 
0

對於其他人可能來到這裏有相同的疑問。只選擇匹配正則表達式的文件,仍然能夠對它們進行排序,你所希望的方式的方式是:根據你想怎麼

files_sorted_by_date = Dir["your regex"].sort_by { |x| File.birthtime(x) }.reverse

files_sorted_by_date = Dir["your regex"].sort_by { |x| File.birthtime(x) }

您文件排序。

我不能使用Dir.entries方法