Как работать с zip архивами в Lazarus?

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Leon70
незнакомец
Сообщения: 5
Зарегистрирован: 02.11.2023 18:15:35

Как работать с zip архивами в Lazarus?

Сообщение Leon70 »

В Lazarus и вообще в паскале есть возможность создавать zip и разархивировать? Я уже двое суток безуспешно ищу эту информацию в интернете. Все способы, которые находятся не работают. На вики сайте freepascal предложенные способы тоже не работают выдавая кучу ошибок. Только один способ, который я нашёл на каком-то сайте сработал, но он записывает в архив весь абсолютный путь. Вручную такой архив открывается, а вот средствами паскаля нет из-за того, что в архив копируется весь путь, все папки вместе с буквой диска.
Вот этот способ.
Архивация:

Uses zipper;
var
a : TZipper;
b : TZipFileEntries;

begin
b := TZipFileEntries.Create(TZipFileEntry);
b.AddFileEntry('D:\one.txt'); //путь к архивируемому файлу
a :=TZipper.Create;
a.FileName:='D:\one.zip'; //указание пути к создаваемому архиву
a.ZipFiles(b);
a.Free;
b.Free;

readln;
end.

В архиве теперь такой путь D:\one.zip\D:\one.txt
При распаковке ничего никуда на распаковывается, но если создать архив вручную и закинуть туда файл то рабтает при помощи вот такого кода:

var
b : TUnZipper;
k : string;

begin
b := TUnzipper.Create;
k := 'D:\one.zip'; //указываем путь к архиву
try
b.FileName := k;
b.OutputPath := 'D:\too'; //указываем куда распаковать
b.Examine;
b.UnZipAllFiles;
finally
b.free;
end;
readln;
end.
RRYTY
постоялец
Сообщения: 253
Зарегистрирован: 25.12.2021 09:00:32

Сообщение RRYTY »

Почему не использовать стороний архиватор?
xchgeaxeax
постоялец
Сообщения: 198
Зарегистрирован: 11.05.2023 02:51:40

Сообщение xchgeaxeax »

Если проблема только с путями, тогда используйте относительные пути, предварительно определив значение текущей директории (SetCurrentDir('D:\')).

И вроде как Zipper надо использовать не так

Код: Выделить всё

program project1;

uses
  SysUtils, zipper;

var
  aZipper: TZipper;

begin
  SetCurrentDir('/home/xchgeaxeax');
  aZipper   := TZipper.Create;
  aZipper.Entries.AddFileEntry('test.txt', 'name.txt');
  aZipper.Entries.AddFileEntry('/home/xchgeaxeax/test.txt', 'data.txt');
  aZipper.SaveToFile('test.zip');
  FreeAndNil(aZipper);
end.
Аватара пользователя
Снег Север
долгожитель
Сообщения: 3067
Зарегистрирован: 27.11.2007 15:14:47
Контактная информация:

Сообщение Снег Север »

И в делфи, и в лазаре использую компоненты Abbrevia -
https://sourceforge.net/projects/tpabbrevia/files/
можно также ставить из онлайн пекедж менеджера.
stikriz11
постоялец
Сообщения: 136
Зарегистрирован: 04.09.2023 14:54:19

Сообщение stikriz11 »

Leon70 писал(а):Я уже двое суток безуспешно ищу эту информацию в интернете.
https://webdelphi.ru/2020/05/rabota-s-a ... ee-pascal/ - и тут смотрели? Начиная с TurboPower Abbrevia - вот этот пример у меня работал раньше.
Seenkao
энтузиаст
Сообщения: 568
Зарегистрирован: 01.04.2020 02:37:12
Контактная информация:

Сообщение Seenkao »

В ZenGL Андрей давно сделал примеры распаковки архивов, в демке 2 и почти для всех демок под Android (это низкий уровень работы с архивами! Будьте аккуратны!). Если посмотреть ZenGL и примеры на C/C++ для библиотеки Zip, то можно так же сделать и архивацию. Если нет необходимости архивировать, то можно просто использовать ZenGL или модули из него.
Leon70
незнакомец
Сообщения: 5
Зарегистрирован: 02.11.2023 18:15:35

Сообщение Leon70 »

xchgeaxeax писал(а):Если проблема только с путями, тогда используйте относительные пути, предварительно определив значение текущей директории (SetCurrentDir('D:')).

И вроде как Zipper надо использовать не так
Так созданный архив вообще не открывается. У меня Windows 10, на других системах не пробовал.

Добавлено спустя 1 час 21 минуту 25 секунд:
Снег Север писал(а):И в делфи, и в лазаре использую компоненты Abbrevia
Не работает в новой версии Lazarus на Windows 10, выходит куча ошибок, пишет что-то про неподдерживаемые определители. Решили отказаться от Object Pascal и Lazarus, делаем на C#.

Добавлено спустя 5 минут 9 секунд:
Всем спасибо за ответы, но так ничего и не получилось. На новой версии lazarus на Windows 10 ничего не работает. Мы решили отказаться от object pascal и lazarus и сделали выбор в пользу C#.
Pascasl и Lazarus вначале подкупили нас доступностью, простотой, тем, что для созданных приложений конечному пользователю не требуется устанавливать на компьютер никаких виртуальных машин, интерпретаторов, но для Object Pascal или ничего нет вообще, или всё безнадёжно устарело. Язык практически мёртв.
iskander
энтузиаст
Сообщения: 627
Зарегистрирован: 08.01.2012 18:43:34

Сообщение iskander »

Leon70 писал(а):Всем спасибо за ответы, но так ничего и не получилось.
Хм, вот это

Код: Выделить всё

program test_pack;
{$mode objfpc}{$h+}
uses
  Classes, SysUtils, FileUtil, Zipper;
var
  files: TStrings;
begin
  Files := FindAllFiles(GetCurrentDir, '*.txt');
  try
    TZipper.Zip('my_arc.zip', files);
  finally
    Files.Free;
  end;
end.
упаковывает все найденные в текущей и вложенных папках текстовые файлы в архив my_arc.zip.
А вот это

Код: Выделить всё

program test_unpack;
{$mode objfpc}{$h+}
uses
  SysUtils, Zipper;
begin
  with TUnZipper.Create do
    try
      FileName := 'my_arc.zip';
      OutputPath := 'my_files';
      Flat := True;
      UnZipAllFiles;
    finally
      Free;
    end;
end.
распаковывает архив в папку my_files.
Так в чём проблема?
stikriz11
постоялец
Сообщения: 136
Зарегистрирован: 04.09.2023 14:54:19

Сообщение stikriz11 »

Leon70 писал(а): Мы решили отказаться от object pascal и lazarus и сделали выбор в пользу C#.
Весь пост ради этой фразы?
xchgeaxeax
постоялец
Сообщения: 198
Зарегистрирован: 11.05.2023 02:51:40

Сообщение xchgeaxeax »

Забавно. Ему привели рабочий пример для создания архива с помощью zipper, а он такой - "мои кривые руки слишком кривые, чтобы его скопировать и попробовать и теперь я беру кривой шарп".
Аватара пользователя
Снег Север
долгожитель
Сообщения: 3067
Зарегистрирован: 27.11.2007 15:14:47
Контактная информация:

Сообщение Снег Север »

Leon70 хм, у меня windows 11 pro x64, lazarus 3.0 FPC 3.2.2 - стабильная последняя версия, поставил со своей ссылки Abbrevia 5.2 - ни единой ошибки и под х32 и под х64 лазарем.
Что я делаю не так? :mrgreen:
Аватара пользователя
Sharfik
энтузиаст
Сообщения: 836
Зарегистрирован: 20.07.2013 01:04:30

Сообщение Sharfik »

Leon70 писал(а):Всем спасибо за ответы, но так ничего и не получилось. На новой версии lazarus на Windows 10 ничего не работает. Мы решили отказаться от object pascal и lazarus и сделали выбор в пользу C#.
Pascasl и Lazarus вначале подкупили нас доступностью, простотой, тем, что для созданных приложений конечному пользователю не требуется устанавливать на компьютер никаких виртуальных машин, интерпретаторов, но для Object Pascal или ничего нет вообще, или всё безнадёжно устарело. Язык практически мёртв.
Скажите проще - вы даже не пытались. Я не программист профессиональный, и то разобрался как Zipper использовать. Или на худой конец связку 7zip библиотеки. И Wiki сам подправлял по Zipper, чтобы показать людям как с кирилицей работать на старый версиях FPC. Не хотите развиваться и решать задачу ваше право, только чушь не пишите подобную.
Ваш C# даже компилятора с IDE не имеет нормального чтобы установить и не конопатить себе мозги, все колхозно по кускам собирать надо, и при этом он живой? При том что он даже не предназначен для работы с БД. А на FPC построено две среды полноценные разработки, которые ребенок может установить и начать что то создавать.
SSerge
энтузиаст
Сообщения: 971
Зарегистрирован: 12.01.2012 05:34:14
Откуда: Барнаул

Сообщение SSerge »

Sharfik писал(а):Ваш C# даже компилятора с IDE не имеет нормального чтобы установить и не конопатить себе мозги, все колхозно по кускам собирать надо
Э... А как же visual studio?
Аватара пользователя
Sharfik
энтузиаст
Сообщения: 836
Зарегистрирован: 20.07.2013 01:04:30

Сообщение Sharfik »

SSerge писал(а):Э... А как же visual studio?
Я имел ввиду легально и без костылей доступные. Я с VS очень мало знаком, в плане разработки. В силу следующей истории. В районе 16ого года знакомясь с Revit и его API рассматривал как можно разрабатывать под него плагины, и был сильно огорчен ориентацией на C# (Renga у Аскон сейчас такая же). Как выяснилось(на тот момент) для разработки были VS и VS Express и под последним скомпилировать плагин было не реально по ограничениям среды. А путь использования взломанного ПО не мой. Хоть и не могу зарабатывать на своем ПО, но и использовать взломанное - не уважать себя. Только если нет совсем альтернатив, тогда еще как то понять могу. Сейчас(полюбопытствовал только что) как вижу Express нет совсем, и есть Visual Studio Community. Может стало проще в сборках между проектами сделанными на разных версиях, но это уже третья реализация за 20 лет среды программирования у MS. Не многовато ли? Напоминает Delphi/Turbo Delphi/Turbo Delphi Express в который хозяева поиграли и бросили подсевших на произвол судьбы. Lazarus в этом плане выглядит хоть как то надежнее, стабильнее, и не зависит от маркетинговой политики продаж. Был бы профессиональным разработчиком под продукты MS - VS был бы актуален, а так нафиг надо строить свою жизнь(тратить время личное) на шатком продукте не ориентированном на долговременную стабильность понятий и политики. Плюс не заметил кроссплатформенности особой.
Тут Eclipse IDE(изучал с ним Java) с навесками со стороны выглядит куда интереснее даже, но опять же - не сильно удобно будет переползать если что на Linux. А lazarus так или иначе идет с " подстилкой из соломки" на черный день фанатов Win.
sts
энтузиаст
Сообщения: 519
Зарегистрирован: 04.04.2008 12:15:44
Откуда: Тольятти

Сообщение sts »

Sharfik писал(а): легально и без костылей доступные.
ну это вообще не аргумент. то что за иде надо платить это нормально, вон под яву давно есть аж две халявные иде, а люди предпочитают покупать третью, хотя по возможностям те две, особенно на начальном этапе продвижения третьей, ничем не уступали.
Ответить