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

前端之家收集整理的这篇文章主要介绍了如何使用ruby判断FTP文件是否存在?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在试图找出最好和最快的方法来判断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.

解决方法

我认为你的方法看起来很好,除了一件事:不是所有的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进行比较.

猜你在找的Ruby相关文章