我创建了一个PHP脚本来更新本地目录中的实时Web服务器。 我正在将脚本迁移到Python中。它在大多数情况下工作正常,但在PUT命令之后,文件的大小似乎会改变。因此,文件的大小与服务器上的文件大小不同。
从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()
有什么建议吗?
答案 0 :(得分:15)
您是否需要使用rb
打开二进制文件?
f = open (locfile, "rb")
答案 1 :(得分:3)
如果您在Windows或* nix环境中使用文件的属性,您会注意到两种尺寸。一个是扇区大小,一个是实际大小。扇区大小是硬盘上用完的扇区数(以字节为单位)。这是因为两个文件不能与大多数现代文件系统位于同一扇区中,因此如果您的文件填满了扇区的一半,则整个扇区都标记为已填充。
因此,您可能会将扇区文件大小与FTP服务器上的实际文件大小进行比较,反之亦然。
答案 2 :(得分:0)
小文件占用文件系统上的整个节点,无论大小如何。
我的主机倾向于在ftp中将所有小文件报告为4kb,但在shell中会提供准确的大小,因此它可能是ftp客户端常见的“功能”。