检查目录中的文件,检索第一个文件

时间:2010-05-09 20:00:04

标签: ruby file directory

我正在写一个小红宝石守护进程,我希望它能做到以下几点:

  • 检查特定目录是否包含文件(在本例中为.yml文件)
  • 如果是这样,请取第一个文件(按数字排序),然后解析为哈希
  • 使用此哈希作为参数
  • 执行'yield'

我现在拥有的是:

loop do
    get_next_in_queue { |s| THINGS }
end

def get_next_in_queue
  queue_dir = Dir[File.dirname(__FILE__)+'/../queue']
  info = YAML::load_file(queue_dir[0]) #not sure if this works or not
  yield info
end

如果可能的话,我想让yield有条件,所以只有在实际找到文件时才会发生。谢谢!

2 个答案:

答案 0 :(得分:1)

好的,我有这个工作! queue_dir.empty?的问题是目录始终包含[".", ".."]

所以我做的是:

def get_next_in_queue
    queue_dir = Dir.entries(File.dirname(__FILE__)+'/../queue')
    queue_dir.delete "."
    queue_dir.delete ".."

    if !queue_dir.empty?
        info = YAML::load_file("#{File.dirname(__FILE__)}/../queue/#{queue_dir[0]}")
        yield stem_info
    else
        sleep(30) #since it is empty, we probably don't need to check instantly
    end
end

答案 1 :(得分:0)

只需添加其他支票:

def get_next_in_queue
  queue_dir = Dir[File.dirname(__FILE__)+'/../queue']
  return if queue_dir.empty?
  info = YAML::load_file(queue_dir[0]) #not sure if this works or not
  yield info if info
end

根据您想要的行为,您可以另外引发异常,记录错误,睡眠N秒等。