2008-08-05 9 views
35

He creado un script PHP para actualizar un servidor web que está activo dentro de un directorio local. Estoy migrando el script a Python. Funciona bien en su mayor parte, pero después de un comando PUT, el tamaño del archivo parece cambiar. Por lo tanto, el tamaño del archivo es diferente del del archivo en el servidor.Diferencias de tamaño de archivo después de copiar un archivo a un servidor vía FTP

Una vez que vuelvo a descargar el archivo desde el servidor FTP, la única diferencia es la marca CR/LF. Esto me molesta porque el mismo script compara el tamaño de los archivos para actualizar. Además, en caso de que signifique algo, la secuencia de comandos funciona perfectamente en PHP vía 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() 

¿Alguna sugerencia?

Respuesta

17

¿Necesita abrir el locfile en binario usando rb?

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

Muchas gracias, esta fue la foto entre los ojos que necesitaba, pasé todo el fin de semana golpeando mi cabeza contra la pared por esto. Esto también se aplica al escenario inverso, transfiriendo desde ftp. – snarkyname77

+0

Funciona perfectamente con su consejo. ¡Gracias! (una respuesta positiva en 2 minutos, wow) – PabloG

+0

@PabloG ¿De verdad has hecho ese comentario hace un momento, o me han atrapado en un túnel del tiempo? –

3

Bueno, si va por debajo de las propiedades de su archivo en Windows o en un entorno * nix, notará dos tamaños. Uno es el tamaño del sector, y uno es el tamaño real. El tamaño del sector es la cantidad de sectores en bytes que se utilizan en su disco duro. Esto se debe a que dos archivos no pueden estar en el mismo sector con la mayoría de los sistemas de archivos modernos, de modo que si su archivo llena la mitad del sector, todo el sector se marca como lleno.

Por lo tanto, es posible que esté comparando el tamaño del archivo del sector con el tamaño del archivo real en el servidor FTP o viceversa.

0

Los archivos pequeños ocupan todo un nodo en el sistema de archivos sea cual sea el tamaño.

Mi host tiende a informar todos los archivos pequeños como 4kb en ftp, pero en un shell da un tamaño preciso, por lo que podría ser una 'característica' común para los clientes ftp.

Cuestiones relacionadas