2008-08-05 51 views
35

我已經創建了一個PHP腳本來更新本地目錄內活動的Web服務器。 我正在將腳本遷移到Python。它在大多數情況下工作正常,但在PUT命令之後,文件的大小似乎改變了。因此,文件的大小與服務器上文件的大小不同。將文件複製到服務器後的文件大小差異víaFTP

一旦我從FTP服務器再次下載文件,唯一的區別是CR/LF標記。這讓我非常惱火,因爲相同的腳本正在比較要更新的文件的大小。此外,萬一它意味着什麼,該腳本在PHPvíaftp_put中完美工作。

from ftplib import FTP 

ftpserver = "myserver" 
ftpuser = "myuser" 
ftppass = "mypwd" 

locfile = "g:/test/style.css" 
ftpfile = "/temp/style.css" 

try: 
    ftp = FTP(ftpserver, ftpuser, ftppass) 
except: 
    exit ("Cannot connect") 

f = open (locfile, "r") 
try: 
    ftp.delete (ftpfile) 
except: 
    pass 

# ftp.sendcmd ("TYPE I") 
# ftp.storlines("STOR %s" % ftpfile, f) 
ftp.storbinary("STOR %s" % ftpfile, f) 
f.close() 

ftp.dir (ftpfile) 
ftp.quit() 

有什麼建議嗎?

回答

17

是否需要使用rb以二進制格式打開locfile?

f = open (locfile, "rb") 
+0

非常感謝你,這是我需要的眼睛之間的鏡頭,我整個週末都把頭撞在了牆上。這也適用於相反的情況,從ftp轉移。 – snarkyname77 2009-11-23 14:16:27

3

那麼,如果您在Windows或* nix環境下進入文件的屬性,您會注意到兩種尺寸。一個是扇區大小,一個是實際大小。扇區大小是在硬盤上用完的扇區數。這是因爲兩個文件不能與大多數現代文件系統處於同一個扇區,所以如果您的文件佔滿扇區的一半,則整個扇區將被標記爲已滿。

因此,您可能會將扇區文件大小與FTP服務器上的實際文件大小進行比較,反之亦然。

0

無論文件大小如何,小文件佔用整個節點。

我的主機傾向於將所有小文件報告爲4kb的ftp,但是在shell中提供了一個精確的大小,因此它可能是ftp客戶端常見的「特性」。

相關問題