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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.12.2013, 12:56   #1
ДралсяСошибками
Форумчанин
 
Аватар для ДралсяСошибками
 
Регистрация: 31.05.2011
Сообщений: 301
Печаль Распаковка Zlib

Добрый день, Господа.
Подскажите в чём ошибка, начинает распаковывать нормально 20-30кб, но дальше уже распаковывает не правильно, пока не выскочит ошибка
Код:
MS := TMemoryStream.Create;
  FS := TFileStream.Create('12345', fmCreate);
  DS := TDecompressionStream.Create(MS);
    repeat
      i := Recv(s, Buffer, SizeOf(Buffer), 0);
      MS.Write(Buffer, i);
      Count := DS.Read(Buffer, i);
      FS.Write(Buffer, Count);
    until i = 0;

Последний раз редактировалось ДралсяСошибками; 17.12.2013 в 13:01.
ДралсяСошибками вне форума Ответить с цитированием
Старый 17.12.2013, 13:09   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Правильно. Так делать нельзя. Сначала считай все в MemoryStream, а уже потом распаковывай. Для компрессора важно чтоб весь запакованный контент был в наличии а не только его часть. По частям он не умеет.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 17.12.2013, 13:13   #3
ДралсяСошибками
Форумчанин
 
Аватар для ДралсяСошибками
 
Регистрация: 31.05.2011
Сообщений: 301
По умолчанию

Спасибо. После, распаковка работает, хотел побыстрее, жаль что так нельзя
ДралсяСошибками вне форума Ответить с цитированием
Старый 17.12.2013, 13:14   #4
Slym
Участник клуба
 
Регистрация: 07.12.2011
Сообщений: 1,025
По умолчанию

попытка распаковать на лету?
так вот по твоему коду размер распакованных данных не превышает размер запакованных...
Код:
допустим Buffer - 1кб
i := Recv(s, Buffer, SizeOf(Buffer), 0); i=1024
      MS.Write(Buffer, i); 
      Count := DS.Read(Buffer, i);count<=1024
      FS.Write(Buffer, Count);
забей на распаковку налету - сначала прими полностью потом распаковывай
Не стесняемся, плюсуем!
Slym вне форума Ответить с цитированием
Старый 17.12.2013, 13:21   #5
ДралсяСошибками
Форумчанин
 
Аватар для ДралсяСошибками
 
Регистрация: 31.05.2011
Сообщений: 301
По умолчанию

Цитата:
Сообщение от Slym Посмотреть сообщение
размер распакованных данных не превышает размер запакованных...
Именно так.
Спасибо, уже забил
ДралсяСошибками вне форума Ответить с цитированием
Старый 17.12.2013, 13:37   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
хотел побыстрее
Типичная ошибка )
Мы все на нее клюем время от времени.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
zlib KOLANICH Общие вопросы C/C++ 3 10.12.2011 14:41
zLib FanRa3 Работа с сетью в Delphi 4 28.03.2011 16:40
Работа с zlib Mr.Dmitry Общие вопросы Delphi 4 18.02.2011 07:45
zlib library chuvakner Помощь студентам 2 27.10.2010 23:57
ZLib Simply-Art Обсуждение статей 3 03.03.2007 08:24