Zip-Zap. Как заZIPить и заUNZIPить файл
Для большинства своих случаев я пользуюсь архиватором WinZip самой последней
версии, потому что он удобный, а главное - красивый. Ну и еще потому что формат
архивов Zip самый популярный во всех частях Сети. (Хотя RARит?ты еще кое-где
встречаются).
Так вот, вместо того, чтобы восхвалять этот архиватор во всех инстанциях,
попробуем лучше начать юзать его по полной программе.
Когда я делал одну игрушку (это было очень давно) у меня получилось огромное
количество зауковых файлов и просто немеренное количество графики. Общее
количество файлов зашкаливало за две сотни (как уже говорилось это было давно, я
был начитан всяких умных книжек и понятие не имел о методах Clip и тому
подобных). Тогда-то у меня и возникла умная мысль заархивировать все это
хозяйство, а затем, когда программы запускается - разархивировать куда-нибудь
типа Windows\Temp и пользоваться. После недели издевательств над файлом
unzip.exe в попытках сотворить хоть что-нибудь, я узнал как запускать программы
с помощью функций Shell, ShellExecute, запускать окно во всевозможных его
состояниях... вобщем я много что узнал, только разархивировать у меня ничего не
получилось.
Ну потом у меня было еще много разных умных мыслей и я
постепенно забыл о всех этих позорных корчах, переключившись на более
благородные деяния. И так я сидел до сего момента, пока не встретил на
конференции улиц VB вопрос про архивацию файлов, который заставил меня вспомнить
об этой моей вековой давности проблеме (спасибо, Vigrin).
Покопавшись в своих залежах ActiveX я натолкнулся на одну
библиотеку, а чуть позже еще на два контрола. Библиотека мне не понравилась,
поэтому описывать ее не буду.
Скажу сразу: откуда контролы ко мне попали я не помню, поэтому
и благодарности от меня не дождетесь :). Производители контролов - немецкие
братья по разуму, только версия контролов меньше единички, что подразумевает
некое количество багов.
Zip
Все элементарно. Свойству ZipFileName должно быть присвоено полное имя файла, затем вызываем метод AddFileToZip с указанным именем файла для архивации и готово! Повторяем второй пункт до победного конца. При этом, контрол выдает сообщение путем события ZipMessage(ByVal Message As String). Самые любопытные могут этот Message распечатать.
В добавок, контрол имеет полезные булевы свойства, которые вы можете наблюдать в диалоге Add To Archive WinZip'а. Это:
NoPathInfo - сохранение исходного пути файла.
NoDirEntries - вложенные директории
System - системные файлы
и другие.
Unzip
Тоже просто. Сначала свойству Filename присваиваем имя архива. Затем, свойству DestinationDir имя папки назначения. Вот затем будет чуточку посложнее. Если хотите разархивировать все и сразу, то примените метод UnzipAll. Если один файл - то UnzipFile и укажите имя файла. В чем сложность? А если пользователь не знает имени файла? Используйте метод ListAllFiles. При этом у контрола начнется излияние информации через событие:
Если приглядеться, можно найти здесь много разных полезных свойств: имя файла, дату его создания, размеры, сжатый и исходный и еще много чего.
Сколько в архиве файлов, столько раз будет происходить это событие. Так что не мешкайте, и составляйте список файлов и их свойств.
Так что используя эти два контрола, вы можете не дожидаясь официального выхода сами создать следующую версию WinZip'а, написав ее на VB!
Приятного программирования.
Комментарии |
| отсутствуют |
Добавление комментария |