Различия в размере файла после копирования файла на сервер по протоколу FTP

StackOverflow https://stackoverflow.com/questions/2311

Вопрос

Я создал PHP-скрипт для обновления веб-сервера, который находится внутри локального каталога.Я переношу скрипт на Python.По большей части это работает нормально, но после команды PUT размер файла, похоже, меняется.Таким образом, размер файла отличается от размера файла на сервере.

Как только я снова загружу файл с FTP-сервера, единственным отличием будет отметка CR / LF.Это раздражает меня, потому что один и тот же скрипт сравнивает размер файлов для обновления.Кроме того, на случай, если это что-то значит, скрипт отлично работает в 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()

Есть какие-нибудь предложения?

Это было полезно?

Решение

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

f = open (locfile, "rb")

Другие советы

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

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

Небольшие файлы занимают целый узел в файловой системе, какого бы размера он ни был.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top