2011-04-11 119 views
3

我寫一個腳本,民意調查的FTP站點本地到什麼時候可用的文件並下載。這些文件被各方隨機存入FTP站點。我需要一種方法能夠,檢測下載之前,如果在FTP站點的文件已經由源方調過來完全。有關如何去做這件事的任何想法?如何檢測FTP文件傳輸完成?

在此先感謝您的幫助!

+1

這是一個非常普遍的問題。我通過檢查一個文件的大小,然後再次檢查它來解決它,雖然不是很優雅。如果尺寸在5秒鐘內改變,可能仍然在寫。我試過鎖 - 不行。 – MJB 2011-04-11 18:04:28

+1

P.S.我也先對他們進行了處理,所以我只能等待最新的文件或三個文件。 – MJB 2011-04-11 18:06:05

回答

2

如果你不能操縱檢查的唯一途徑我腦海FTP服務器本身就是輪詢文件大小,如果文件大小不更長的時間而改變,你可以肯定的上傳完成。但沒有人能保證。理想情況下,您可以修改FTP服務器,並在完成一些上傳後使其執行一些腳本。

一些僞代碼:

my %filesizes; 
my %processed; 

sub poll { 
    foreach (@files_on_ftp) { 
     if($_->filesize == $filesizes{$_->filename} and not $processed{$_->filename}) { 
      process($_); 
      $processed{$_->filename)++; 
     } 
    } 
} 
6

如果你有過客戶端的控制,更安全,更清潔,有效的方法是讓客戶端執行以下操作:

  1. 上傳文件於... /部分/ somefile
  2. 重命名.... /部分/ somefile到.... /完整/ somefile

這將導致一次全部出現在後者目錄中的文件,因此,所有你需要做的就是掃描該目錄。如果您需要非輪詢解決方案,您甚至可以向操作系統通知添加到該目錄。

2

像池上的解決方案取決於礦山客戶端的:

  1. 首先是文件上傳
  2. 如果完成,客戶端上傳空標誌文件(如file.name.txt.finished

當你看到finished -file,你知道文件已準備就緒。