102 lines
3.2 KiB
ObjectPascal
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.
|