2009-10-08 115 views
5

我正在寫一個簡單的程序,用於將文件同步到FTP。我希望能夠檢查文件的本地版本是否與遠程版本不同,因此我可以判斷文件是否需要傳輸。我可以檢查文件大小,但這不是100%可靠的,因爲顯然可能兩個文件具有相同的大小但包含不同的數據。文件被修改的日期/時間也不可靠,因爲用戶的計算機日期可能設置錯誤。如何判斷FTP上的文件是否與實際下載文件的本地文件相同?

是否有其他方法可以判斷本地文件和FTP上的文件是否相同?

回答

5

沒有一個通用的方法。如果ftp站點包含校驗和文件,則可以下載該校驗和文件(由於校驗和很小,所以速度會更快),然後查看校驗和是否匹配。但是,當然,這依賴於ftp站點的所有者創建校驗和文件並保持最新。

除此之外,你是S.O.L.

1

使用校驗和。你生成這兩個文件的md5(或sha1,sha2等)哈希,如果這些文件是相同的,那麼哈希將是相同的。

+3

這是如何工作的沒有下載? – 2009-10-08 22:12:28

+0

嗯,它可以工作,如果你有ftp的控制權,並且可以在文件上傳時生成校驗和......這在技術上仍然是一個下載,我想,但它不是一個任意大小的文件的下載。 – neminem 2009-10-08 22:31:52

2

如果服務器是普通的FTP,那麼檢查大小和時間戳是不行的。

FTP沒有爲您提供文件散列/校驗和的機制,所以您需要做一些事情,如保留一個特殊的「列表文件」,其中包含所有文件名和散列,或者通過HTTP執行單獨的請求,或其他協議。

理想情況下,你不應該使用FTP,它確實是一個過時的協議。如果你有控制系統,你可以使用rsync或類似的東西。

1

IETF嘗試通過添加新的FTP命令(如MD5和MMD5)來實現此目的。

http://www.faqs.org/rfcs/ftp-rfcs.html

但是,沒有所有的FTP供應商都支持他們。因此,您必須檢查應用程序將針對的目標FTP服務器,以確定它是否支持MD5/MMD5。如果沒有,您可以選擇上面提到的解決方法。

0

每當你的客戶端上傳文件到FTP服務器,地圖中的每個文件的哈希和本地存儲它的客戶端計算機上(或存儲它的任何地方,你可以訪問後,格式並不重要,可以是一個XML文件,純文本,只要您可以檢索鍵/值對)。然後,當您再次上傳文件時,只需使用您創建的哈希表檢查本地文件,如果不同則上傳文件。這樣,您不必依賴服務器來維護校驗和文件,而且您不必讓運行的進程監視FileSystemWatcher事件。

相關問題