libftp.size function gives wrong results!

Michael Davis michael at damaru.com
Sun Jun 9 13:07:15 EDT 2002


Peter Hansen wrote:

> Michael Davis wrote:
>> 
>> I'm writing a python program which will upload or download files via ftp.
>> It's intended to be used to deploy a web site from a local machine to a
>> server. It tries to determine which files are modified on the local
>> machine by comparing file sizes and modification times.
>> 
>> I try to compare files using os.stat for the local file and FTP.size for
>> the remote. The problem is, FTP.size is giving me incorrect results. If I
>> use the ftp command line client, and look at one of my files on the
>> server (the output looks like 'ls -l') then I can see that the file size,
>> is, say, 1200. But the FTP.size function returns, say, 1242.
> 
> I think you'll find the number of lines in that file is 42.  The
> difference
> is probably between CRLF and LF line terminations in the file.  If you
> transfer files with FTP and want to preserve the line endings, you have
> to specify the binary type, not ascii.  Don't know how to do this with
> ftplib, but from the ftp command line you would use 'type binary' or
> 'type ascii' to switch.

Thanks Peter,

I had already thought of that. Both my local and the remote systems are 
unix, and so don't have CRs. But you're right - the difference in size is 
the same as the number of lines, as though the ftp size command assumed 
that I wanted to convert the end-of-lines to CRLF. I had specified binary 
mode transfers. And if I do 'ftp size' on true binary files, the same 
problem happens!

Anyway, I just found out that one of the servers I need to talk to doesn't 
allow me to use 'size' anyway, so I'm going to ask a different python 
question in a different message.

Thanks again,

-- 
Michael Davis
Damaru
Custom Programming - Web Development - Database Design
http://www.damaru.com
416-540-1284



More information about the Python-list mailing list