Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> data error при декомпрессии gzip 
V
    Опции темы
MadMas
  Дата 5.8.2008, 07:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Блондинко
*


Профиль
Группа: Участник
Сообщений: 89
Регистрация: 5.5.2006
Где: Екатеринбург

Репутация: нет
Всего: нет



Добрый день. 

Пишу консольное приложение распаковки архива gzip. Почему-то возникает ошибка "data error". Подскажите, пожалуйста, где косяк? 

Код

program LRC;

{$APPTYPE CONSOLE}

uses
  SysUtils,  ZLibEx, Classes;

var
dest: TFileStream;
z: TZDecompressionStream;
bytesread: integer;
mainbuffer:array[0..1023] of char;
const buffer_size=1024;

begin
z := TZDecompressionStream.Create(TFileStream.Create('C:\traf.log.gz',
fmOpenRead), 12 + 32);
dest:=TFileStream.Create('C:\o_O.txt', fmCreate);
  try
repeat
bytesRead := z.Read(mainbuffer, buffer_size);
dest.WriteBuffer(mainbuffer, buffer_size);
WriteLn (String(mainbuffer));
until bytesread < 1024;
  except
  z.Free();
  dest.free();
  exit;
  end;

z.Free();
dest.free();
WriteLn('Done.');
ReadLn;

end.

PM   Вверх
Alexeis
Дата 5.8.2008, 09:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



Код

dest.WriteBuffer(mainbuffer[0], buffer_size);



--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
MadMas
Дата 5.8.2008, 09:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Блондинко
*


Профиль
Группа: Участник
Сообщений: 89
Регистрация: 5.5.2006
Где: Екатеринбург

Репутация: нет
Всего: нет



Alexeis, все равно вылетает с ошибкой data error
PM   Вверх
aleksh
Дата 5.8.2008, 10:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 609
Регистрация: 8.7.2008

Репутация: 3
Всего: 13



может ошибка возникает когда при последнем WriteLn (String(mainbuffer)) в конце буфера недпустимые символы оказываются?
а если ввести проверку на коректность данных в mainbuffer перед выводом?
PM MAIL   Вверх
Alexeis
Дата 5.8.2008, 11:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



MadMas, на какой строчке вылетает?


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
MadMas
Дата 5.8.2008, 11:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Блондинко
*


Профиль
Группа: Участник
Сообщений: 89
Регистрация: 5.5.2006
Где: Екатеринбург

Репутация: нет
Всего: нет



aleksh, ошибка возникает стабильно на пятом цикле. 
На строчке 
Код

bytesRead := z.Read(mainbuffer, buffer_size);


Уходит сюда: 
Код

function ZDecompressCheck(code: Integer): Integer;
begin
  Result := code;

  if code < 0 then
  begin
    raise EZDecompressionError.Create(code);
  end;
end;

PM   Вверх
aleksh
Дата 5.8.2008, 11:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 609
Регистрация: 8.7.2008

Репутация: 3
Всего: 13



стабильно -- независемо от размера C:\traf.log.gz?
PM MAIL   Вверх
Alexeis
Дата 5.8.2008, 11:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



  Че могу сказать. Компонент самописанный, можно попробовать вычислять оставшийся размер и не просить больше в Read. Возможно тут чего-то не предусмотрели.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
MadMas
Дата 5.8.2008, 11:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Блондинко
*


Профиль
Группа: Участник
Сообщений: 89
Регистрация: 5.5.2006
Где: Екатеринбург

Репутация: нет
Всего: нет



Да. Проверяла на архивах размерами 64Мб и 13 Кб.
PM   Вверх
aleksh
Дата 5.8.2008, 11:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 609
Регистрация: 8.7.2008

Репутация: 3
Всего: 13



что пишет в окне с ошибкой, случаем не что-то из
    'file error',                    // Z_ERRNO          (-1)
    'stream error',             // Z_STREAM_ERROR   (-2)
    'data error',                 // Z_DATA_ERROR     (-3)
    'insufficient memory',   // Z_MEM_ERROR      (-4)
    'buffer error',               // Z_BUF_ERROR      (-5)
    'incompatible version', // Z_VERSION_ERROR  (-6)
если да, то что именно
PM MAIL   Вверх
MadMas
Дата 5.8.2008, 11:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Блондинко
*


Профиль
Группа: Участник
Сообщений: 89
Регистрация: 5.5.2006
Где: Екатеринбург

Репутация: нет
Всего: нет



aleksh,     'data error',                 // Z_DATA_ERROR     (-3)
PM   Вверх
Alexeis
Дата 5.8.2008, 11:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



Еще могу посоветовать посмотреть содержимое mainbuffer на первых циклах. Нормальные достаются данные или мусор.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
MadMas
Дата 5.8.2008, 12:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Блондинко
*


Профиль
Группа: Участник
Сообщений: 89
Регистрация: 5.5.2006
Где: Екатеринбург

Репутация: нет
Всего: нет



Alexeis, данные нормальные, декодируются правильно. 
PM   Вверх
Alexeis
Дата 5.8.2008, 12:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



  Стандартные архиваторы правильно распаковывают?


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
MadMas
Дата 5.8.2008, 12:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Блондинко
*


Профиль
Группа: Участник
Сообщений: 89
Регистрация: 5.5.2006
Где: Екатеринбург

Репутация: нет
Всего: нет



Цитата(Alexeis @ 5.8.2008,  12:06)
Стандартные архиваторы правильно распаковывают?

Что подразумевается под стандартными архиваторами?
PM   Вверх
aleksh
Дата 5.8.2008, 12:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 609
Регистрация: 8.7.2008

Репутация: 3
Всего: 13



а почему:
Код

until bytesread < 1024;
?
PM MAIL   Вверх
MadMas
Дата 5.8.2008, 12:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Блондинко
*


Профиль
Группа: Участник
Сообщений: 89
Регистрация: 5.5.2006
Где: Екатеринбург

Репутация: нет
Всего: нет



aleksh, потому, что если количество байт меньше метра значит это конец файла.. Вроде как. 
PM   Вверх
aleksh
Дата 5.8.2008, 12:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 609
Регистрация: 8.7.2008

Репутация: 3
Всего: 13



а есле bytesRead объявить как longint?

Добавлено через 1 минуту и 17 секунд
да, еще, не надо buffer_size делать константой
PM MAIL   Вверх
Alexeis
Дата 5.8.2008, 12:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



Цитата(MadMas @  5.8.2008,  11:10 Найти цитируемый пост)
Что подразумевается под стандартными архиваторами? 

  WinRar, WinZip, 7zip.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
MadMas
Дата 5.8.2008, 13:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Блондинко
*


Профиль
Группа: Участник
Сообщений: 89
Регистрация: 5.5.2006
Где: Екатеринбург

Репутация: нет
Всего: нет



aleksh, ситуация аналогичная. Вылетает. 

Alexeis, да, нормально. 

Может посоветуете другой компонент тогда?
PM   Вверх
aleksh
Дата 5.8.2008, 13:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 609
Регистрация: 8.7.2008

Репутация: 3
Всего: 13



unrar.dll, как вариант

Добавлено через 6 минут и 37 секунд
надо же разобраться
может buffer_size вообще убрать и писать
Код

bytesRead := z.Read(mainbuffer, sizeof(mainbuffer));

PM MAIL   Вверх
MadMas
Дата 5.8.2008, 13:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Блондинко
*


Профиль
Группа: Участник
Сообщений: 89
Регистрация: 5.5.2006
Где: Екатеринбург

Репутация: нет
Всего: нет



aleksh, убрала, написала, результат тот же - data error.. 
PM   Вверх
Alexeis
Дата 5.8.2008, 14:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



MadMas, если запаковать дргим упаковщиком gzip то все нормально?

Добавлено через 1 минуту и 4 секунды
Я имею ввиду распаковку этим способом.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
aleksh
Дата 5.8.2008, 14:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 609
Регистрация: 8.7.2008

Репутация: 3
Всего: 13



а если mainbuffer сделать динамическим массивом, bytesread и buffer_size объявить как longint. перед циклом buffer_size задавть значение (поэксперементировать: 1024, 500, 1048576 еще что-то)

извеняюсь, а что значит "12 + 32"?
PM MAIL   Вверх
MadMas
Дата 5.8.2008, 14:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Блондинко
*


Профиль
Группа: Участник
Сообщений: 89
Регистрация: 5.5.2006
Где: Екатеринбург

Репутация: нет
Всего: нет



Уже нашла ошибку. 
Надо было изменить windowbit (это как раз "12 + 32") на другое значение. Вместо 12 поставить дефолтные 15. 

Код

z := TZDecompressionStream.Create(TFileStream.Create('C:\traf.log1.gz',
fmOpenRead), 15+32);


PM   Вверх
aleksh
Дата 5.8.2008, 14:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 609
Регистрация: 8.7.2008

Репутация: 3
Всего: 13



ну вот и славно...
если все работает - можно ставить галочку теме
PM MAIL   Вверх
MadMas
Дата 5.8.2008, 14:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Блондинко
*


Профиль
Группа: Участник
Сообщений: 89
Регистрация: 5.5.2006
Где: Екатеринбург

Репутация: нет
Всего: нет



Забыла )
PM   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0935 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.