加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 23:04:39 所属栏目:百科 来源:网络整理
导读:我正在试图找出最好和最快的方法来判断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 trueend 看
我正在试图找出最好和最快的方法来判断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进行比较.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读