通过FTP将文件复制到服务器后文件大小差异
我写了一个PHP脚本,用来更新一个在本地目录里的在线网页服务器。现在我把这个脚本迁移到Python。大部分情况下它运行得很好,但在执行PUT命令后,文件的大小似乎发生了变化。因此,文件的大小和服务器上的文件不一样。
当我再次从FTP服务器下载这个文件时,唯一的区别就是CR/LF标记。这让我很烦恼,因为同样的脚本在比较文件大小时需要更新。而且,如果这有什么意义的话,这个脚本在PHP中通过ftp_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()
有什么建议吗?
3 个回答
0
小文件在文件系统中占用一个完整的节点,不管它们的实际大小是多少。
我的主机在ftp上通常会把所有小文件都显示为4KB,但在命令行中显示的大小是准确的,所以这可能是ftp客户端的一个“特性”。
3
如果你在Windows或者其他类Unix系统中查看文件的属性,你会看到两个大小。一个是扇区大小,另一个是实际大小。扇区大小是指在你的硬盘上占用的字节数。因为在大多数现代文件系统中,两个文件不能共用同一个扇区,所以如果你的文件只占用了扇区的一半,整个扇区都会被标记为已满。
所以你可能是在比较扇区文件大小和FTP服务器上的实际文件大小,或者反过来。
17
你需要用二进制模式打开locfile吗?也就是用rb
吗?
f = open (locfile, "rb")