ВК для работы с zlibВнешняя компонента для работы с упаковщиком и распаковщиком zlib. Приложен тестовый пример для 1С:Предприятие 7.7 и исходный код (Delphi 7). | | Автор статьи: romix Последняя редакция №1 от 11.09.10 URL: http://kb.mista.ru/article.php?id=808 | |
Ключевые слова: zlib, компрессия, упаковка, архиватор
Компонента поддерживает два метода - УпаковатьФайл(имяф1, имяф2) и РаспаковатьФайл(имяф2, имяф3), а также свойство УровеньСжатия - "None", "Fastest", "Default" или "Max".
Процедура Выполнить()
Результ = ЗагрузитьВнешнююКомпоненту (КаталогИБ()+"..\vk_zlib.dll");
Если Результ = 1 Тогда
zlib=СоздатьОбъект("Addin.vk_zlib");
Иначе
Сообщить ("Не найдена внешняя компонента vk_zlib.");
Возврат;
КонецЕсли;
имяф1=КаталогИБ()+"Test\colors2.html";
Сообщить("Файл для упаковки: "+имяф1);
имяф2=КаталогИБ()+"Test\colors2.zlib";
Сообщить("Упакованный файл: "+имяф2);
zlib.УровеньСжатия="Max"; // "None", "Fastest", "Default" или "Max"
zlib.УпаковатьФайл(имяф1, имяф2);
имяф3=КаталогИБ()+"Test\colors2.test";
Сообщить("Распакованный файл: "+имяф3);
zlib.РаспаковатьФайл(имяф2, имяф3);
КонецПроцедуры
Для интересующихся - тестовый код в Delphi 7
///////////////////////////////////////////////////////////////
//Примеры взяты из DRKB Library, 2009 Автор RoboSol
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Zlib, ZlibConst;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure ComressStream( aSource, aTarget : TStream; compressionRate : TCompressionLevel );
var comprStream : TCompressionStream;
begin
// compression level : (clNone, clFastest, clDefault, clMax)
comprStream := TCompressionStream.Create( compressionRate, aTarget );
try
comprStream.CopyFrom( aSource, aSource.Size );
comprStream.CompressionRate;
finally
comprStream.Free;
End;
End;
procedure DecompressStream(aSource, aTarget: TStream);
var decompStream : TDecompressionStream;
nRead : Integer;
buffer : array[0..1023] of Char;
begin
decompStream := TDecompressionStream.Create( aSource );
try
repeat
nRead:=decompStream.Read( buffer, 1024 );
aTarget.Write( buffer, nRead );
Until nRead = 0;
finally
decompStream.Free;
End;
End;
procedure TForm1.Button1Click(Sender: TObject);
var f1, f2: Tstream;
begin
f1 := TFileStream.Create('c:\colors2.html', fmOpenRead);
f2 := TFileStream.Create('c:\colors2.zlib', fmCreate);
ComressStream(f1, f2, clMax);
f1.Free;
f2.Free;
end;
procedure TForm1.Button2Click(Sender: TObject);
var f1, f2: Tstream;
begin
f1 := TFileStream.Create('c:\colors2.zlib', fmOpenRead);
f2 := TFileStream.Create('c:\colors2.test', fmCreate);
DecompressStream(f1, f2);
f1.Free;
f2.Free;
end;
end.
Файл для скачивания
http://x-romix.narod.ru/
vk_zlib.zip |