107 lines
3.2 KiB
ObjectPascal
107 lines
3.2 KiB
ObjectPascal
////////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// ****************************************************************************
|
|
// * Project : FWZip
|
|
// * Unit Name : SplitZip
|
|
// * Purpose : Äåìîíñòðàöèÿ ðàáîòû c ðàçáèòèåì àðõèâà
|
|
// * Author : Àëåêñàíäð (Rouse_) Áàãåëü
|
|
// * Copyright : © Fangorn Wizards Lab 1998 - 2023.
|
|
// * Version : 2.0.0
|
|
// * Home Page : http://rouse.drkb.ru
|
|
// * Home Blog : http://alexander-bagel.blogspot.ru
|
|
// ****************************************************************************
|
|
// * Stable Release : http://rouse.drkb.ru/components.php#fwzip
|
|
// * Latest Source : https://github.com/AlexanderBagel/FWZip
|
|
// ****************************************************************************
|
|
//
|
|
// Èñïîëüçóåìûå èñòî÷íèêè:
|
|
// ftp://ftp.info-zip.org/pub/infozip/doc/appnote-iz-latest.zip
|
|
// https://zlib.net/zlib-1.2.13.tar.gz
|
|
// http://www.base2ti.com/
|
|
//
|
|
|
|
// Äàííûé ïðèìåð ïîêàçûâàåò êàê ìîæíî ðàçäåëèòü àðõèâ íà íåñêîëüêî ÷àñòåé,
|
|
// áåç íåîáõîäèìîñòè ðàñïàêîâêè äàííûõ è ïîâòîðíîãî ñæàòèÿ.
|
|
|
|
program SplitZip;
|
|
|
|
{$IFDEF FPC}
|
|
{$MODE Delphi}
|
|
{$H+}
|
|
{$ELSE}
|
|
{$APPTYPE CONSOLE}
|
|
{$ENDIF}
|
|
|
|
uses
|
|
SysUtils,
|
|
Classes,
|
|
FWZipWriter,
|
|
FWZipModifier;
|
|
|
|
procedure AddItem(AWriter: TFWZipWriter; const AName, AData: string);
|
|
var
|
|
S: TStringStream;
|
|
begin
|
|
S := TStringStream.Create(AData);
|
|
try
|
|
S.Position := 0;
|
|
AWriter.AddStream(AName, S);
|
|
finally
|
|
S.Free;
|
|
end;
|
|
end;
|
|
|
|
var
|
|
Writer: TFWZipWriter;
|
|
Modifier: TFWZipModifier;
|
|
Index: TReaderIndex;
|
|
begin
|
|
SetCurrentDir(ExtractFilePath(ParamStr(0)));
|
|
try
|
|
// ñîçäàåì àðõèâ êîòîðûé áóäåì ðàçäåëÿòü
|
|
Writer := TFWZipWriter.Create;
|
|
try
|
|
// äîáàâëÿåì 4 ýëåìåíòà â àðõèâ
|
|
AddItem(Writer, 'test1.txt', 'ïåðâûé ýëåìåíò');
|
|
AddItem(Writer, 'test2.txt', 'âòîðîé ýëåìåíò');
|
|
AddItem(Writer, 'test3.txt', 'òðåòèé ýëåìåíò');
|
|
AddItem(Writer, 'test4.txt', '÷åòâåðòûé ýëåìåíò');
|
|
// ñîõðàíÿåì
|
|
Writer.BuildZip('..\..\DemoResults\split_main_archive.zip');
|
|
finally
|
|
Writer.Free;
|
|
end;
|
|
// ñîçäàåì ýêçåìïëÿð ìîäèôèêàòîðà àðõèâîâ
|
|
Modifier := TFWZipModifier.Create;
|
|
try
|
|
// ïîäêëþ÷àåì ðàíåå ñîçäàííûé àðõèâ
|
|
Index := Modifier.AddZipFile('..\..\DemoResults\split_main_archive.zip');
|
|
// äîáàâëÿåì èç íåãî ïåðâûå äâà ýëåìåíòà
|
|
Modifier.AddFromZip(Index, 'test1.txt');
|
|
Modifier.AddFromZip(Index, 'test2.txt');
|
|
// è ñîõðàíÿåì â íîâûé àðõèâ
|
|
// ïðè ýòîì ðåàëüíîé ïåðåïàêîâêè äàííûõ íå ïðîèçîéäåò,
|
|
// äàííûå âîçüìóòñÿ êàê åñòü â âèäå ìàññèâà áàéò ïðÿìî â ñæàòîì âèäå
|
|
// èç îðèãèíàëüíîãî àðõèâà
|
|
Modifier.BuildZip('..\..\DemoResults\splited_archive1.zip');
|
|
|
|
// òåïåðü óäàëÿåì äîáàâëåííûå ýëåìåíòû è äîáàâëÿåì âòîðûå äâà
|
|
Modifier.Clear;
|
|
Modifier.AddFromZip(Index, 'test3.txt');
|
|
Modifier.AddFromZip(Index, 'test4.txt');
|
|
// ñîõðàíÿåì âî òîðîé àðõèâ
|
|
Modifier.BuildZip('..\..\DemoResults\splited_archive2.zip');
|
|
finally
|
|
Modifier.Free;
|
|
end;
|
|
|
|
// âîò è âñå, ìû ðàçäåëèëè èçíà÷àëüíûé àðõèâ íà äâå ÷àñòè
|
|
// íå çàíèìàÿñü ïåðåïàêîâêîé äàííûõ
|
|
// êàê îáüåäèíÿòü ñìîòðèòå â ïðèìåðå MergeZip
|
|
except
|
|
on E: Exception do
|
|
Writeln(E.ClassName, ': ', E.Message);
|
|
end;
|
|
Readln;
|
|
end.
|