2008-12-17 68 views
4

我們有一個ftp系統設置來監視/下載遠程ftp服務器,這些服務器不受我們控制。腳本連接到遠程ftp,並抓取服務器上文件的文件名,然後檢查是否已經下載了它的文件。如果尚未下載,我們下載該文件並將其添加到列表中。防止ftplib下載正在進行中的文件?

我們最近遇到了一個問題,遠程ftp端的某個人將複製到一個巨大的單個文件(> 1GB)中,然後腳本會醒來,看到一個新文件並開始下載正在複製的文件。

什麼是最好的檢查方法?我正在考慮抓取文件大小等待幾秒鐘,再次檢查文件大小,看看它是否增加了,如果沒有,我們再下載它。但是由於時間的關係,我們不能等待每個單獨的文件集幾秒鐘,看它的文件大小是否增加。

什麼是最好的方式去做這件事,目前一切都是通過pythons ftplib來完成的,除了使用前面提到的方法,我們怎麼能做到這一點。

再次讓我重申一下,我們對遠程ftp站點有0個控制權。

謝謝。

UPDATE1:

我就在想,如果我試圖將其重命名什麼......因爲我們對FTP完全權限,如果該文件的上傳過程中會重命名命令失敗?

我們在這裏沒有任何真正的選擇...我們呢?

UPDATE2: 這裏有一些有趣的東西我們測試過的ftps似乎在傳輸開始時自動分配空間。

E.g.如果我將200MB文件傳輸到FTP服務器。如果我連接到ftp服務器並在上傳過程中執行大小,則傳輸處於活動狀態。它顯示大小爲200mb。儘管該文件只有10%完整。

權限似乎也是隨機設置FTP自帶的IIS服務器設置文件完成複製後的權限。雖然其他一些較老的ftp服務器在您發送文件後立即設置它。

:'(

回答

5

「該死的魚雷!全速前進!「

只需下載文件即可。如果它是一個大文件,那麼在下載完成後等待,只要您的方案合理,並從停止點繼續下載。重複,直到沒有更多的東西下載。

+0

這不是一個壞的方法。 我喜歡它。 – UberJumper 2008-12-17 19:55:18

0

當OS複製完成後你不會知道它可以減緩或等待

對於絕對的把握,你真的需要兩個文件

  • 。大量的文件。
  • 和一個小觸發器文件。

他們可以亂用馬西沃e文件他們想要的。但是,當他們觸摸觸發文件時,您正在下載這兩個文件。


如果您無法獲得觸發器,則必須平衡輪詢所需的時間與下載所需的時間。

這樣做。

  1. 獲取列表。檢查時間戳。

  2. 檢查大小與以前的文件大小。如果尺寸不是很接近,它現在正在被複制。等待;循環這一步,直到尺寸接近以前的尺寸。

  3. 雖然你還沒有完成:

    一個。獲取文件。

    b。再次獲取列表。檢查新列表,以前的列表和文件的大小。如果他們同意:你完成了。如果他們不同意:下載時文件已更改;你沒有完成。

0

正如你說你有過服務器0控制和不能使你的客戶後觸發文件由S.洛特的建議,你必須等待處理不完善的解決方案和風險不完整的文件傳輸,也許一段時間,並比較前後的文件大小。

您可以嘗試按照您的建議進行重命名,但由於您有0個控件,因此無法確定ftp-server-administrator(或其後繼者)是否不更改平臺或ftp服務器或限制您的權限。

對不起。

0

如果您正在處理多個文件,您可以一次獲得所有大小的列表,等待十秒鐘,並查看哪些是相同的。無論哪一個都應該是安全的下載。