Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.04.2008, 23:57   #11
Air
Участник клуба
 
Аватар для Air
 
Регистрация: 30.04.2007
Сообщений: 1,307
По умолчанию

Цитата:
А если файл двоичный?
Это типа "10100110101011001010101".
точно также... 23 символа, 23 байта.

В приведённом коде (#6), "eoln" в строке
Код:
DataSize:= StrToInt(sl);
Определил размер файла, т.к. сначала отсылается размер передаваемого файла.
В строке
Код:
AllSize:=AllSize + DataSize;
он суммирует всё, что приходит на "Сервер", т.е. двойной размер файла.

Потому что в строке
Код:
if Data.Size = DataSize then
Сравнивается, размер пакета и размер файла.
Если размер пакета 25 кбайт, а размер файла 26 кбайт, то переменная "Data" будет ожидать добавления данных, а как только размеры одинаковы
Код:
Data.Position:= 0;
выставляется указатель на начало и производятся новые операции с "Data".

Тогда поправкой будет являться для строки
Код:
AllSize:=AllSize + DataSize;
поставить её в
Код:
try    
    Data.Write(s[1], length(s));    
    if Data.Size = DataSize then
    begin    
      AllSize:=AllSize + DataSize;
      Data.Position:= 0;
В этом случае "AllSize" будет отображать размер принятого файла, а когда придёт новый, то - сумму первого и второго.
По схеме "eoln" получится сумму дважды первого и дважды второго.

P.S. внутренность файла не играет роли если Вы его передаёте как файл, если Вы передадите ехе-файл как строчку, он придёт не полностью. (проверено временем)
Всё гениальное - просто!
Air вне форума Ответить с цитированием
Старый 27.04.2008, 23:59   #12
Air
Участник клуба
 
Аватар для Air
 
Регистрация: 30.04.2007
Сообщений: 1,307
По умолчанию

Цитата:
А если файл двоичный?
Это типа "10100110101011001010101".
точно также... 23 символа, 23 байта.

В приведённом коде (#6), "eoln" в строке
Код:
DataSize:= StrToInt(sl);
Определил размер файла, т.к. сначала отсылается размер передаваемого файла.
В строке
Код:
AllSize:=AllSize + DataSize;
он суммирует всё, что приходит на "Сервер", т.е. двойной размер файла.

Потому что в строке
Код:
if Data.Size = DataSize then
Сравнивается, размер пакета и размер файла.
Если размер пакета 25 кбайт, а размер файла 26 кбайт, то переменная "Data" будет ожидать добавления данных, а как только размеры одинаковы
Код:
Data.Position:= 0;
выставляется указатель на начало и производятся новые операции с "Data".

Тогда поправкой будет являться для строки
Код:
AllSize:=AllSize + DataSize;
поставить её в
Код:
try    
    Data.Write(s[1], length(s));    
    if Data.Size = DataSize then
    begin    
      AllSize:=AllSize + DataSize;
      Data.Position:= 0;
В этом случае "AllSize" будет отображать размер принятого файла, а когда придёт новый, то - сумму первого и второго.
По схеме "eoln" получится сумму дважды первого и дважды второго.

P.S. внутренность файла не играет роли если Вы его передаёте как файл, если Вы передадите ехе-файл как строчку, он придёт не полностью. (проверено временем)
Всё гениальное - просто!
Air вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц