微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用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进行比较.

原文地址:https://www.jb51.cc/ruby/265202.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐