我正在试图找出最好和最快的方法来判断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进行比较.