Вопросы по zipper (архивация файлов)

Форум для изучающих FPC и их учителей.

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

Вопросы по zipper (архивация файлов)

Сообщение Алексей Попов » 11.03.2020 14:35:36

Здравствуйте.
У меня Lazarus на Linux Debian.
Программа
Код: Выделить всё
procedure TForm1.Button1Click(Sender: TObject);
var   ToZip: TZipper;
      UnZip: TUnZipper;
      List : TStringList;
begin ToZip:= TZipper.Create();
      ToZip.FileName:= '/1/MyFile1.zip';  // (Каталог "/1/" существует и доступен для записи)
      List:= TStringList.Create();
      List.Add( '/1/MyFile1.txt');        // (Файл "/1/MyFile1.txt" существует и доступен для чтения)
      ToZip.ZipFiles(List);               // Ошибка ECreateError: "Unable to create file '/1/MyFile1.zip'"

      UnZip:= TUnZipper.Create();
      UnZip.FileName:= '/1/MyFile2.zip';  // (Архивный файл "/1/MyFile2.zip" существует, проверен на распаковываемость и доступен для чтения)
      UnZip.Examine();                    // Ошибка: "Unable to open file '/1/MyFile2.zip'"
end;

компилируется без ошибок.

Выполнение вылетает на инструкциях (смотрите в коде напротив них комментарии с текстом ошибки):
ToZip.ZipFiles(List);
UnZip.Examine();

Предполагаю, проблема с работоспособностью библиотеки zlib, хотя и странно.
Кто-то сталкивался с такой проблемой, и что можете посоветовать? (кроме использовать иные библиотеки)
Алексей Попов
незнакомец
 
Сообщения: 2
Зарегистрирован: 11.03.2020 12:59:58

Re: Вопросы по zipper (архивация файлов)

Сообщение Sharfik » 11.03.2020 22:51:56

Проблема не в библиотеке, а коде. Начни с простого пиши правильно и полностью путь. И посмотри примеры в wiki.freepascal.org
Sharfik
энтузиаст
 
Сообщения: 539
Зарегистрирован: 20.07.2013 01:04:30

Re: Вопросы по zipper (архивация файлов)

Сообщение Алексей Попов » 12.03.2020 07:48:28

Sharfik писал(а): Начни с простого пиши правильно и полностью путь.

Семён Семёныч...
Верно, пути указывал без домашнего каталога.

Надо вместо "/1" было "/home/Пользователь/1", где и находится, в действительности, всё хозяйство...

Вопрос закрыт. Спасибо.
Кстати, пример рабочий; только деструкторы добавить.
Алексей Попов
незнакомец
 
Сообщения: 2
Зарегистрирован: 11.03.2020 12:59:58

Re: Вопросы по zipper (архивация файлов)

Сообщение Vadim » 12.03.2020 14:10:18

Алексей Попов писал(а):Надо вместо "/1" было "/home/Пользователь/1"

Или, с расчётом на универсализм:
Код: Выделить всё
~/1

;-)
Vadim
долгожитель
 
Сообщения: 3900
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Вопросы по zipper (архивация файлов)

Сообщение Дож » 12.03.2020 14:36:06

Это не универсально.

~ - это спец. знак для шеллов (sh, bash и др.), вместо которого они подставляют $HOME. Предназначен для того, чтобы пользователю в командной строке проще было обращаться к своей домашке.

За пределами шеллов он не имеет смысла. Если попытаться открыть файл ~/1, то программа будет искать в текущей директории директорию с названием '~', а не домашку.
Аватара пользователя
Дож
энтузиаст
 
Сообщения: 854
Зарегистрирован: 12.10.2008 16:14:47

Re: Вопросы по zipper (архивация файлов)

Сообщение zoltanleo » 12.03.2020 18:54:32

Поэтому в тестовом проекте лучше использовать строковые константы, типа
Код: Выделить всё
const
  ZipFileName = '/home/Пользователь/1/MyFile1.txt';

и использовать их при присвоении
Код: Выделить всё
List.Add( ZipFileName);

Это заодно избавит от правки одного и того же значения в неск. местах.
Аватара пользователя
zoltanleo
постоялец
 
Сообщения: 374
Зарегистрирован: 17.10.2013 10:55:01

Re: Вопросы по zipper (архивация файлов)

Сообщение svk12 » 13.03.2020 16:11:01

Код: Выделить всё
SysUtils.GetUserDir+'1/MyFile1.txt'
svk12
постоялец
 
Сообщения: 376
Зарегистрирован: 09.06.2008 18:42:47


Вернуться в Обучение Free Pascal

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2

Рейтинг@Mail.ru