//////////////////////////////////////////////////////////////////////////////// // // **************************************************************************** // * Project : FWZip // * Unit Name : ExctractZIPDemo1 // * Purpose : Демонстрация распаковки архива. // * : Используется архив созданный демоприложением CreateZIPDemo1 // * Author : Александр (Rouse_) Багель // * Copyright : © Fangorn Wizards Lab 1998 - 2023. // * Version : 2.0.1 // * 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 ExctractZIPDemo1; {$IFDEF FPC} {$MODE Delphi} {$H+} {$ELSE} {$APPTYPE CONSOLE} {$ENDIF} uses Classes, SysUtils, TypInfo, FWZipReader, FWZipUtils; function ExtractResultStr(Value: TExtractResult): string; begin Result := GetEnumName(TypeInfo(TExtractResult), Integer(Value)); end; var Zip: TFWZipReader; Index: Integer; M: TStringStream; 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 // Распаковать можно в память: M := TStringStream.Create(''); try Zip[Index].ExtractToStream(M, ''); // Файл извлечен, выведем его содержимое в окно консоли {$IFDEF UNICODE} Writeln(M.DataString); {$ELSE} {$IFDEF FPC} Writeln(M.DataString); {$ELSE} Writeln(ConvertToOemString(AnsiString(M.DataString))); {$ENDIF} {$ENDIF} finally M.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.