2011-09-12 53 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方法