FoxZip – класс для работы с ZIP-архивами в Visual FoxPro (исправленный).
Позволяет создавать и распаковывать файлы архивов ZIP-формата.
Реализован в виде Visual Class Library, использует библиотеку zlib (http://www.winimage.com/zLibDll/) Библиотека ZLIB (версии 1.1.4) находится внутри класса (т.е. наличие DLL-библиотеки не требуется).
Толчком к созданию класса послужило решение http://www.foxclub.ru/sol/index.php?act=view&id=293
Изменения:
1. Решена проблема с русскими именами файлов
2. Добавлено свойство AlertReplacingFile (по умолч. - .T.), управляющее выдачей сообщения о наличии существующего файла
Прислал: Кирпичев Алексей  Категория: Система
Подробное описание см. в файле FoxZip.rtf из архива.
Пример использования класса
SET CLASSLIB TO foxzip.vcx
_SCREEN.AddObject.( 'fz', 'foxzip') && добавляем объект FoxZip
_SCREEN.fz.ZipFile('c:\winnt\winhelp.exe') && добавляем второй файл
_SCREEN.fz.ZipClose && закрываем ZIP-файл
_SCREEN.fz.UnZip('c:\winnt\win.zip', 'c:\winnt\111') && декомпрессия созданного ZIP-файла
в несуществующий каталог
_SCREEN.fz.IncludePath = .T. && включать пути
_SCREEN.fz.ZipOneFile('c:\winnt\welcome.exe') && компрессия одного файла с созданием
одноименного ZIP-файла
_SCREEN.fz.UnZip('c:\winnt\welcome.zip', 'c:\winnt\111') && декомпрессия нового ZIP-файла
в уже созданный новый каталог и с созданием подкаталога winnt
Недурственно!
Единственное, что не порадовало - если приходится архивировать большой объем данных, юзер будет
наблюдать песочные часы, и как долго это будет длиться он даже не представляет....
Так что если бы снабдить сей класс каким-нить прогресс-баром - было бы просто шоколадно!
Екатерина
22.11.04 15:50:22
Очень хорошо, быстро и качественно
Для законченности безусловно необходимо:
-привесить термометр, лучше не активиксный,
чтоб была полностью законченная библиотека
-модифицировать класс для архивирования дирректории с вложенными папками(понимаю что и тут
подставить можно,
но лучше для законченности наверно сделать так,
потому что архивируем обычно папку с таблицами, контейнером баз итд, вот и ее подставить-в смысле
папку, а метод создаст список файлов, с учетом вложенных дирректорий)
-на всякий случай как то бы порешать ошибку с ломанием русских названий.
-поставить флаг на архивацию и разархивацию SET SAFETY OFF\on
ну чтоб это тоже было настраивым свойством
С учетом вышеизложенных замечаний :-) и их решения, безусловно считаю что Ваш класс не выйдет из
рейтинга тор,
постольку поскольку выполняет и разархивирование и архивирование,а так же использует в себе
атрибут "все включено" в отличии от всех здесь расположенных.....
Алексей Кирпичев
23.11.04 15:10:42
1. Термометр повешу
2. Насчет вложенных папок подумаем. :о)
3. С русскими названиями пока не знаю как быть, ломаются они внутри чужой DLL-ки
4. с SET SAFETY не понял.
Спасибо за внимание.
Екатерина
23.11.04 15:35:54
>4. с SET SAFETY не понял.
_SCREEN.fz.ZipOpen('c:winntwin.zip') && открываем ZIP-файл
если такой файл существует,
то просит Ваш класс пишет "перезаписать или нет"
Наверно вынести в классе отдельное свойство,
кому как надо пусть так и настроит,
переспрашивать или перезаписывать без вопросов
(По аналогии с настройкой SET SAFETY )
Алексей Кирпичев
25.11.04 14:28:15
Обновление от 25.11.04
1. Проблемы с русскими именами теперь нет (оказалось, что их просто надо перекодировать в
DOS-кодировку)
2. Свойство для управления перезаписью добавлено
Термометр и вложенные папки - пока не успеваю (хотя уже есть и такое решение с
использованием все той же zlib.dll. Примерно так, как я собирался сделать. Только термометр я свой
собирался использовать :о)).
Руденко Илья
30.11.04 12:11:14
О! Еще фишечку нашел! Дело было так:
собираю список файлов в папке через ADir(), причем, что интересно, ADir() возвращает только имя
файла, без пути. Потом пытаюсь эти названия передать архиватору (так же без указания пути). В
итоге, если пусть по дефолту не установлен к архивируемым файлам, имеем архив, который содержит
файлы с требуемыми названиями, но нулевого объема!!! Т.е., при архивации не идет проверка на
наличие архивируемого файла. В итоге, когда пытаемся восстановить базу, имеем такие же файлы
нулевого объема, что не есть гуд...
dfr
13.09.16 08:40:48
Обнаружился баг: после архивирования этой библиотекой таблиц DBF (VFP9) и последующего
разархиваривания (7zip, winrar) снимается признак AUTOINC в DBF (если был)!