2013-05-08 104 views
2

使用下面的方法ftp_download工作,但如果我改變的Net :: FTP getbinaryfile()保存到文件VS保存到變量

ftp.getbinaryfile(file,localdir,1024) #=> Saves the file to localdir 

ftp.getbinaryfile(file) #=> returns nil 

我得到nil返回。根據

http://www.ruby-doc.org/stdlib-2.0/libdoc/net/ftp/rdoc/Net/FTP.html#method-i-getbinaryfile

inilf予如上設置localfilenil,數據應被檢索以及由該方法返回。我究竟做錯了什麼?

def ftp_download(domain,remotedir,filename_regex,user=nil,pwd=nil) 
    ftp = Net::FTP::new(domain) 
    if user && pwd 
    ftp.login(user, pwd) 
    end 
    ftp.chdir(remotedir) 
    fileList = ftp.nlst(filename_regex) 

    fileList.each do |file| 
    localdir=File.join(remotedir,file) 
    localdir=localdir[1..-1] if localdir[0]="/" 
    FileUtils.mkdir_p(File.dirname(localdir)) 
    ftp.getbinaryfile(file,localdir,1024) 
    end 
    ftp.close 
end 

回答

8

如果你看一下getbinaryfile方法簽名,你會發現,如果你想localfilenil你有第二個參數(localfile)的默認值不nilFile.basename(remotefile)

getbinaryfile(remotefile, 
       localfile=File.basename(remotefile), 
       blocksize=DEFAULT_BLOCKSIZE) 

明確地通過它:

ftp.getbinaryfile(file, nil) 
+0

我已經嘗試ftp.getbinaryfile(文件,零),和它似乎現在返回數據。謝謝但是,你知道爲什麼會這麼慢嗎?當我將一個文件保存到一個文件中時,文件將在不到一秒的時間內保存。如果我使用了ftp.getbinaryfile(文件,無),大約需要1分鐘才能返回數據。 – user2012677 2013-05-08 15:13:09

+0

我試過了,我沒有經歷寫入文件和只返回字符串分配結果給變量之間的這種區別,你如何處理返回的數據? – toro2k 2013-05-09 07:11:57

+0

現在,什麼也沒有,只是在irb中顯示數據。該文件很大,大約30mb。似乎如果我加上「無」來壓制輸出,它會變得更快。謝謝! – user2012677 2013-05-11 16:38:45