Использоваение Zlib

Тема в разделе "Delphi - Система", создана пользователем -, 26 ноя 2010.

  1. Гость

    Всем, Доброго дня!
    Возникла необходимость кодировать и декодировать данные с использованием ZLib (Delphi 2010), а точнее используя функции ZCompress и ZDeCompress. Компрессия вроди как получается, но вот обратно ничего не выходит. Выдает - Data Error.

    Для проверки наскоряк написал такой код:
    Код (Delphi):
    var
    InFile:TMemoryStream;
    out_buf,o2:pointer;
    str:String;
    sz:integer;
    buf,buf2:array [0..66] of byte;
    begin
    InFile:=TMemoryStream.Create;
    InFile.LoadFromFile('c:\codetext.txt');
    InFile.Read(buf,67);
    ZCompress(@buf,InFile.Size,out_buf,sz);
    InFile.Free;
    InFile:=TMemoryStream.Create;
    ZDecompress(out_buf,sz,o2,sz);
    InFile.Write(o2,sz);
    InFile.SaveToFile('c:\sss2.decmp');
    end;
    Сдесь в файле c:\codetext.txt хрониться одна строка текста которую я компрессирую процедурой ZCompress, затем тутже получившийся результат out_buf пытаюсь декопрессировать ZDecompress(out_buf,sz,o2,sz) и записать результат в файл. В таком варианте ошибки нет, файл создается, но исходного текста так и не видно - содержит в себе полную тарабарщину.

    Кто работал с ZLib подскажите пожалуйста как их правильно использовать.
     
  2. Dimka Inc

    Dimka Inc Гость

    Хм. Вопрос номер 1. А на что указывают указатели out_buf и o2? Насколько мне известно, сначала надо выделить область памяти, инициализировать указател, ссылающийся на эту область памяти, а уже потом туда что-то писать, или считывать.
     
  3. sinkopa

    sinkopa Well-Known Member

    Регистрация:
    17 июн 2009
    Сообщения:
    344
    Симпатии:
    9
    Вот рекомендованный embarcadero пример использования ZLib
    http://cc.embarcadero.com/item/18987
    Скачать там правда дают только зарегистрированным юзерам, поэтому вот (см. в аттаче)
     

    Вложения:

Поделиться этой страницей