Различия в размере файла после копирования файла на сервер через 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)

Решение

Вам нужно открыть файл locfile в двоичном формате с помощью rb?

f = open (locfile, "rb")

Что ж, если вы войдете в свойства своего файла в Windows или среде * nix, вы заметите два размера. Один - размер сектора, а второй - фактический размер. Размер сектора - это количество секторов в байтах, которые используются на вашем жестком диске. Это связано с тем, что два файла не могут находиться в одном секторе с большинством современных файловых систем, поэтому, если ваш файл заполняет половину сектора, весь сектор помечается как заполненный.

Таким образом, вы можете сравнивать размер файла сектора с фактическим размером файла на FTP-сервере или наоборот.

Маленькие файлы занимают весь узел файловой системы независимо от размера.

Мой хост имеет тенденцию сообщать обо всех небольших файлах как 4 КБ в ftp, но дает точный размер в оболочке, поэтому это может быть «функцией», общей для ftp-клиентов.