FoxPro Club Главная

Конференция Решения Фотоальбом Сайт М.Дроздова Статьи Файловый архив Книга Visual FoxPro 9.0 Русский Help для Visual FoxPro
Пользователей: 9237
Вход
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.ZipOpen('c:\winnt\win.zip') && открываем ZIP-файл

_SCREEN.fz.ZipFile('c:\winnt\win.ini') && добавляем файл

_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

_SCREEN.fz.ClearDlls = .T.

_SCREEN.fz.removeobject('fz')


 
Сделайте оценку этого решения Плохо Удовлетворительно Так себе Хорошо Отлично Текущая оценка: (4.819) Вложение [39.53]kb
Дополнения пользователей
FoxZip – класс для работы с ZIP-архивами в Visual FoxPro (исправленный).
[+][?]
Руденко Илья
20.11.04 17:02:35

Недурственно!
Единственное, что не порадовало - если приходится архивировать большой объем данных, юзер будет
наблюдать песочные часы, и как долго это будет длиться он даже не представляет....
Так что если бы снабдить сей класс каким-нить прогресс-баром - было бы просто шоколадно!
Екатерина
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 (если был)!
[Дополнить]



© 2000-2017 Fox Club 
При размещении любых материалов с сайта на других ресурсах- прямая ссылка на www.foxclub.ru обязательна
Яндекс.Метрика