Diferenças de tamanho de arquivo após copiar um arquivo para um servidor via FTP
Pergunta
Eu criei um script PHP para atualizar um servidor web que está ativo dentro de um diretório local.Estou migrando o script para Python.Funciona bem na maior parte, mas após um comando PUT, o tamanho do arquivo parece mudar.Assim, o tamanho do arquivo é diferente daquele do arquivo no servidor.
Depois de baixar novamente o arquivo do servidor FTP, a única diferença é a marca CR/LF.Isso me irrita porque o mesmo script está comparando o tamanho dos arquivos a serem atualizados.Além disso, caso isso signifique alguma coisa, o script funciona perfeitamente em PHP via 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()
Alguma sugestão?
Solução
Você precisa abrir o locfile em binário usando rb
?
f = open (locfile, "rb")
Outras dicas
Bem, se você acessar as propriedades do seu arquivo no Windows ou em um ambiente *nix, notará dois tamanhos.Um é o tamanho do setor e o outro é o tamanho real.O tamanho do setor é o número de setores em bytes usados no disco rígido.Isso ocorre porque dois arquivos não podem estar no mesmo setor com a maioria dos sistemas de arquivos modernos; portanto, se o seu arquivo preencher metade do setor, todo o setor será marcado como preenchido.
Portanto, você pode estar comparando o tamanho do arquivo do setor com o tamanho real do arquivo no servidor FTP ou vice-versa.
Arquivos pequenos ocupam um nó inteiro no sistema de arquivos, seja qual for o tamanho.
Meu host tende a relatar todos os arquivos pequenos como 4kb no FTP, mas em um shell fornece um tamanho preciso, portanto pode ser um 'recurso' comum aos clientes FTP.