JarUnPacker/prereq/fwzip/Demos/Extract ZIP 1/ExctractZIPDemo1.dpr
2023-02-02 12:02:14 +03:00

102 lines
3.2 KiB
ObjectPascal

////////////////////////////////////////////////////////////////////////////////
//
// ****************************************************************************
// * Project : FWZip
// * Unit Name : ExctractZIPDemo1
// * Purpose : Äåìîíñòðàöèÿ ðàñïàêîâêè àðõèâà.
// * : Èñïîëüçóåòñÿ àðõèâ ñîçäàííûé äåìîïðèëîæåíèåì CreateZIPDemo1
// * Author : Àëåêñàíäð (Rouse_) Áàãåëü
// * Copyright : © Fangorn Wizards Lab 1998 - 2013.
// * Version : 1.0.10
// * 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
// http://zlib.net/zlib-1.2.5.tar.gz
// http://www.base2ti.com/
//
// Äàííûé ïðèìåð ïîêàçûâàåò äâà âàðèàíòà èçâëå÷åíèÿ èíôîðìàöèè èç àðõèâà.
program ExctractZIPDemo1;
{$APPTYPE CONSOLE}
uses
Windows,
Classes,
SysUtils,
TypInfo,
FWZipReader;
function ExtractResultStr(Value: TExtractResult): string;
begin
Result := GetEnumName(TypeInfo(TExtractResult), Integer(Value));
end;
var
Zip: TFWZipReader;
Index: Integer;
S: TStringStream;
OemString: AnsiString;
begin
SetCurrentDir(ExtractFilePath(ParamStr(0)));
try
Zip := TFWZipReader.Create;
try
// Îòêðûâàåì ðàíåå ñîçäàííûé àðõèâ
Zip.LoadFromFile('..\DemoResults\CreateZIPDemo1.zip');
// Ïåðâûé âàðèàíò ðàñïàêîâêè - ðó÷íîé äîñòóï ê êàæäîìó ýëåìåíòó àðõèâà
// Â ïðèìåðå CreateZIPDemo1 ìû ñîçäàëè â êîðíå àðõèâà ôàéë Test.txt
// Íàì íåîáõîäèìî ïîëó÷èòü èíäåêñ ýòîãî ýëåìåíòà â àðõèâå
Index := Zip.GetElementIndex('test.txt');
if Index >= 0 then
begin
// Ðàñïàêîâàòü ìîæíî â ïàìÿòü:
S := TStringStream.Create('');
try
Zip[Index].ExtractToStream(S, '');
// Ôàéë èçâëå÷åí, âûâåäåì åãî ñîäåðæèìîå â îêíî êîíñîëè
{$IFDEF UNICODE}
Writeln(OemString);
{$ELSE}
OemString := AnsiString(S.DataString);
AnsiToOem(PAnsiChar(OemString), PAnsiChar(OemString));
Writeln(OemString);
{$ENDIF}
finally
S.Free;
end;
// Ðàñïàêîâàòü òàê-æå ìîæíî íà äèñê:
Write('Extract "', Zip[Index].FileName, '": ');
Writeln(ExtractResultStr(
Zip[Index].Extract('..\DemoResults\CreateZIPDemo1\ManualExtract\', '')));
end;
// Òàêèì-æå îáðàçîì ìîæíî ïîëó÷èòü ñîäåðæèìîå îñòàëüíûõ ôàéëîâ
// Âòîðîé âàðèàíò ðàñïàêîâêè - àâòîìàòè÷åñêîé ðàñïàêîâêà àðõèâà
// â óêàçàííóþ ïàïêó íà äèñêå
Zip.ExtractAll('..\DemoResults\CreateZIPDemo1\');
// Òðåòèé âàðèàíò ðàñïàêîâêè - àâòîìàòè÷åñêàÿ ðàñïàêîâêà ïî ìàñêå
// (äàííûé êîä ðàñïàêóåò âñå ôàéëû íàõîäÿùèåñÿ â ïàïêå AddFolderDemo àðõèâà)
Zip.ExtractAll('AddFolderDemo*', '..\DemoResults\CreateZIPDemo1\ExtractMasked\');
finally
Zip.Free;
end;
except
on E: Exception do
Writeln(E.ClassName, ': ', E.Message);
end;
Readln;
end.