Текущий архив: 2005.07.18;
Скачать: CL | DM;
ВнизФормат GZip где я не прав? Найти похожие ветки
← →
Slym © (2005-04-13 10:21) [0]1 При распаковке (RAR) жалуется на неверный CRC, но исправно распаковывает!!!
2 IExplorer не читает этот файл если при Accept-Encoding: gzip
но Reget его исправно выкачивает (также в gzip)(ему наверно чихать на CRC)
CRC32 исходно файла расчитывается правильно, может я не туда ложу его в архиве?
по стандарту:
заголовок 10байт (я использую только основной заголовок) ->
поток deflate->
crc32 4байта ->размер распакованный 4байта.
сравнивал два архива одного файла зажатый моим модулем и сжатый GZipом... конец (8 байт) одинаковый. GZip распаковывает нормально, на мой жалуется на CRC (RAR)
мой модуль:unit GZip;
interface
uses classes,zlib,crc32;
procedure CompressStream(Source,Dest:TStream);
procedure CompressStreamInplace(Source:TStream);
implementation
type
TGZipHeader=packed record
ID1:byte;
ID2:byte;
CM:byte;
FLG:byte;
MTIME:integer;
XFL:byte;
OS:byte;
end;
TGZipEnd=packed record
Crc32:integer;
Size:integer;
end;
const DefGZipHeader:TGZipHeader=(ID1:31;ID2:139;CM:8;FLG:0;MTIME:0;XFL:2;OS:255);
procedure CompressStream(Source,Dest:TStream);
var
MemoryStream:TMemoryStream;
CompressionStream:TCompressionStream;
GZipEnd:TGZipEnd;
begin
GZipEnd.Crc32:=Crc32Stream(Source,0);
GZipEnd.Size:=Source.Size;
Dest.WriteBuffer(DefGZipHeader,SizeOf(DefGZipHeader));
MemoryStream:=TMemoryStream.Create;
try
CompressionStream:=TCompressionStream.Create(clMax,MemoryStream);
try
CompressionStream.CopyFrom(Source,0);
finally
CompressionStream.Free;
end;
MemoryStream.Seek(2,soBeginning);//Skip first 2 bytes!
Dest.CopyFrom(MemoryStream,MemoryStream.Size-2);
finally
MemoryStream.Free;
end;
Dest.WriteBuffer(GZipEnd,SizeOf(GZipEnd));
end;
procedure CompressStreamInplace(Source:TStream);
var Dest:TMemoryStream;
begin
Dest:=TMemoryStream.Create;
try
CompressStream(Source,Dest);
Source.Size:=0;
Source.CopyFrom(Dest,0);
finally
Dest.Free;
end;
end;
end.
← →
Slym © (2005-04-15 04:52) [1]Хм... Третьи сутки пошли... Такой простой формат GZip, а помочь никто не хочет... Весь rfc1952 прочитал (может у меня с аглицким плохо), все по нему: не работает!
← →
Slym © (2005-04-15 04:55) [2]Что я делаю:
Серверок на IDHttpServer (Indy10)... с возможностью сжимать контент:
Deflate сжатие работает!, но GZip более широко поддерживается (опираюсь на возможности имеющегося совта) и нужен именно GZip!
Страницы: 1 вся ветка
Текущий архив: 2005.07.18;
Скачать: CL | DM;
Память: 0.45 MB
Время: 0.06 c