如何使用ruby判断FTP文件是否存在?

时间:2011-07-12 18:18:54

标签: ruby ftp open-uri

我正在试图找出判断ftp服务器上是否存在文件的最佳和最快的方法。

这就是我想出来的......

def remote_exists?(idx)
  #@file.rewind if @file.eof?
  ftp = Net::FTP.new(FTP_SERVER)
  ftp.login
  begin
    ftp.size(idx)
  rescue Exception
    return false
  end
  true
end

似乎只是捕获每个异常都是一个坏主意,但我无法获得正确的特定异常。

我也在我的代码中使用OpenURI来实际获取文件。我试图弄清楚是否可能有更好的方法,但我认为它只是使用Net :: FTP。

1 个答案:

答案 0 :(得分:12)

我认为你的方法似乎很好,除了一件事:并非所有FTP服务器都支持SIZE命令,它是在Extensions of FTP中引入的,因此无法保证。正如您所注意到的那样,您的异常处理也有点粗糙。我建议专门解救FTPReplyError。如果它给你一个SIZE没有实现的指示(500或502),你可能应该依赖一个后备,更多代码之后的更多内容:

def remote_exists?(idx)
  ftp = Net::FTP.new(FTP_SERVER)
  ftp.login
  begin
    ftp.size(idx)
  rescue FTPReplyError => e
    reply = e.message
    err_code = reply[0,3].to_i
    unless err_code == 500 || err_code == 502
      # other problem, raise
      raise 
    end
    # fallback solution 
  end
    true
end

可行的后备方法是使用FTP#list检索文件列表,然后迭代它们并与idx进行比较。