Как работать с zip архивами в Lazarus?
Модератор: Модераторы
Как работать с zip архивами в Lazarus?
В 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.
Вот этот способ.
Архивация:
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.
Почему не использовать стороний архиватор?
-
xchgeaxeax
- постоялец
- Сообщения: 198
- Зарегистрирован: 11.05.2023 02:51:40
Если проблема только с путями, тогда используйте относительные пути, предварительно определив значение текущей директории (SetCurrentDir('D:\')).
И вроде как Zipper надо использовать не так
И вроде как 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/
можно также ставить из онлайн пекедж менеджера.
https://sourceforge.net/projects/tpabbrevia/files/
можно также ставить из онлайн пекедж менеджера.
https://webdelphi.ru/2020/05/rabota-s-a ... ee-pascal/ - и тут смотрели? Начиная с TurboPower Abbrevia - вот этот пример у меня работал раньше.Leon70 писал(а):Я уже двое суток безуспешно ищу эту информацию в интернете.
В ZenGL Андрей давно сделал примеры распаковки архивов, в демке 2 и почти для всех демок под Android (это низкий уровень работы с архивами! Будьте аккуратны!). Если посмотреть ZenGL и примеры на C/C++ для библиотеки Zip, то можно так же сделать и архивацию. Если нет необходимости архивировать, то можно просто использовать ZenGL или модули из него.
Так созданный архив вообще не открывается. У меня Windows 10, на других системах не пробовал.xchgeaxeax писал(а):Если проблема только с путями, тогда используйте относительные пути, предварительно определив значение текущей директории (SetCurrentDir('D:')).
И вроде как Zipper надо использовать не так
Добавлено спустя 1 час 21 минуту 25 секунд:
Не работает в новой версии Lazarus на Windows 10, выходит куча ошибок, пишет что-то про неподдерживаемые определители. Решили отказаться от Object Pascal и Lazarus, делаем на C#.Снег Север писал(а):И в делфи, и в лазаре использую компоненты Abbrevia
Добавлено спустя 5 минут 9 секунд:
Всем спасибо за ответы, но так ничего и не получилось. На новой версии lazarus на Windows 10 ничего не работает. Мы решили отказаться от object pascal и lazarus и сделали выбор в пользу C#.
Pascasl и Lazarus вначале подкупили нас доступностью, простотой, тем, что для созданных приложений конечному пользователю не требуется устанавливать на компьютер никаких виртуальных машин, интерпретаторов, но для Object Pascal или ничего нет вообще, или всё безнадёжно устарело. Язык практически мёртв.
Хм, вот это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.
А вот это
Код: Выделить всё
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.
Так в чём проблема?
Весь пост ради этой фразы?Leon70 писал(а): Мы решили отказаться от object pascal и lazarus и сделали выбор в пользу C#.
-
xchgeaxeax
- постоялец
- Сообщения: 198
- Зарегистрирован: 11.05.2023 02:51:40
Забавно. Ему привели рабочий пример для создания архива с помощью 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 лазарем.
Что я делаю не так?
Что я делаю не так?
Скажите проще - вы даже не пытались. Я не программист профессиональный, и то разобрался как Zipper использовать. Или на худой конец связку 7zip библиотеки. И Wiki сам подправлял по Zipper, чтобы показать людям как с кирилицей работать на старый версиях FPC. Не хотите развиваться и решать задачу ваше право, только чушь не пишите подобную.Leon70 писал(а):Всем спасибо за ответы, но так ничего и не получилось. На новой версии lazarus на Windows 10 ничего не работает. Мы решили отказаться от object pascal и lazarus и сделали выбор в пользу C#.
Pascasl и Lazarus вначале подкупили нас доступностью, простотой, тем, что для созданных приложений конечному пользователю не требуется устанавливать на компьютер никаких виртуальных машин, интерпретаторов, но для Object Pascal или ничего нет вообще, или всё безнадёжно устарело. Язык практически мёртв.
Ваш C# даже компилятора с IDE не имеет нормального чтобы установить и не конопатить себе мозги, все колхозно по кускам собирать надо, и при этом он живой? При том что он даже не предназначен для работы с БД. А на FPC построено две среды полноценные разработки, которые ребенок может установить и начать что то создавать.
Э... А как же visual studio?Sharfik писал(а):Ваш C# даже компилятора с IDE не имеет нормального чтобы установить и не конопатить себе мозги, все колхозно по кускам собирать надо
Я имел ввиду легально и без костылей доступные. Я с VS очень мало знаком, в плане разработки. В силу следующей истории. В районе 16ого года знакомясь с Revit и его API рассматривал как можно разрабатывать под него плагины, и был сильно огорчен ориентацией на C# (Renga у Аскон сейчас такая же). Как выяснилось(на тот момент) для разработки были VS и VS Express и под последним скомпилировать плагин было не реально по ограничениям среды. А путь использования взломанного ПО не мой. Хоть и не могу зарабатывать на своем ПО, но и использовать взломанное - не уважать себя. Только если нет совсем альтернатив, тогда еще как то понять могу. Сейчас(полюбопытствовал только что) как вижу Express нет совсем, и есть Visual Studio Community. Может стало проще в сборках между проектами сделанными на разных версиях, но это уже третья реализация за 20 лет среды программирования у MS. Не многовато ли? Напоминает Delphi/Turbo Delphi/Turbo Delphi Express в который хозяева поиграли и бросили подсевших на произвол судьбы. Lazarus в этом плане выглядит хоть как то надежнее, стабильнее, и не зависит от маркетинговой политики продаж. Был бы профессиональным разработчиком под продукты MS - VS был бы актуален, а так нафиг надо строить свою жизнь(тратить время личное) на шатком продукте не ориентированном на долговременную стабильность понятий и политики. Плюс не заметил кроссплатформенности особой.SSerge писал(а):Э... А как же visual studio?
Тут Eclipse IDE(изучал с ним Java) с навесками со стороны выглядит куда интереснее даже, но опять же - не сильно удобно будет переползать если что на Linux. А lazarus так или иначе идет с " подстилкой из соломки" на черный день фанатов Win.
ну это вообще не аргумент. то что за иде надо платить это нормально, вон под яву давно есть аж две халявные иде, а люди предпочитают покупать третью, хотя по возможностям те две, особенно на начальном этапе продвижения третьей, ничем не уступали.Sharfik писал(а): легально и без костылей доступные.
