我寫一個腳本,民意調查的FTP站點本地到什麼時候可用的文件並下載。這些文件被各方隨機存入FTP站點。我需要一種方法能夠,檢測下載之前,如果在FTP站點的文件已經由源方調過來完全。有關如何去做這件事的任何想法?如何檢測FTP文件傳輸完成?
在此先感謝您的幫助!
我寫一個腳本,民意調查的FTP站點本地到什麼時候可用的文件並下載。這些文件被各方隨機存入FTP站點。我需要一種方法能夠,檢測下載之前,如果在FTP站點的文件已經由源方調過來完全。有關如何去做這件事的任何想法?如何檢測FTP文件傳輸完成?
在此先感謝您的幫助!
如果你不能操縱檢查的唯一途徑我腦海FTP服務器本身就是輪詢文件大小,如果文件大小不更長的時間而改變,你可以肯定的上傳完成。但沒有人能保證。理想情況下,您可以修改FTP服務器,並在完成一些上傳後使其執行一些腳本。
一些僞代碼:
my %filesizes;
my %processed;
sub poll {
foreach (@files_on_ftp) {
if($_->filesize == $filesizes{$_->filename} and not $processed{$_->filename}) {
process($_);
$processed{$_->filename)++;
}
}
}
如果你有過客戶端的控制,更安全,更清潔,有效的方法是讓客戶端執行以下操作:
這將導致一次全部出現在後者目錄中的文件,因此,所有你需要做的就是掃描該目錄。如果您需要非輪詢解決方案,您甚至可以向操作系統通知添加到該目錄。
像池上的解決方案取決於礦山客戶端的:
file.name.txt.finished
)當你看到finished
-file,你知道文件已準備就緒。
這是一個非常普遍的問題。我通過檢查一個文件的大小,然後再次檢查它來解決它,雖然不是很優雅。如果尺寸在5秒鐘內改變,可能仍然在寫。我試過鎖 - 不行。 – MJB 2011-04-11 18:04:28
P.S.我也先對他們進行了處理,所以我只能等待最新的文件或三個文件。 – MJB 2011-04-11 18:06:05