Различия в размерах файлов после копирования файла на сервер через FTP - PullRequest
39 голосов
/ 05 августа 2008

Я создал 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 ]

15 голосов
/ 05 августа 2008

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

f = open (locfile, "rb")
3 голосов
/ 05 августа 2008

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

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

0 голосов
/ 05 августа 2008

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

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

...