ZipClass ( Пример zip-ки файлов без компонентов )

Программирование на Active Server Pages и VBScript.
ALX_2002
Мега гуру
Мега гуру
 
Сообщения: 2054
Зарегистрирован: 25.11.2002 (Пн) 20:03

ZipClass ( Пример zip-ки файлов без компонентов )

Сообщение ALX_2002 » 12.12.2007 (Ср) 14:25

Доброго времени суток товарищи. :) Как я вижу, наш раздел ASP пустует. Решил добавить полезную утилитку. Зазиповка файла без использования сторонних компонетов. В инете наткнулся на примерчик, который и решил слегка доделать и оформить в виде класса. Принцип работы основан на возможности работы Windows с ZIP архивами как с каталогами. К сожалению использование такого метода имеет несколько недостатков

1) Нельзя указать степень сжатия
2) WINDOWS COMMANDER некорректно понимает русские имена в ZIP файле. ( Это пока единственный архиватор который так себя повёл )
Обычные WinZip / WinRar понимают имена файлов без проблем
3) Не реализовал функцию добавки файлов и папок в уже созданный архив, т.к возникли трудности с появлением окошек о подтверждении замены файлов. ( В принципе перенос целого каталога в ZIP архив работает )

Если у кого нибудь будут советы и предложения по доработке класса, буду очень рад.

Код: Выделить всё

'/// Пример работы с классом
Set FileSytemObject = CreateObject("Scripting.FileSystemObject")

'/// Получаем путь до каталога в котором находимся
ParentFolderName = FileSytemObject.GetParentFolderName(Wscript.ScriptFullName)

'/// Строим путь для создания тестового файла
SourceFilePath = FileSytemObject.BuildPath(ParentFolderName,"Текстовый документ.txt")

'/// Создаём и заполняем файл содержимым
FileSytemObject.OpenTextFile(SourceFilePath,2,True).write "Содержимое файла"

'/// Создаём архив
DestFilePath = FileSytemObject.BuildPath(ParentFolderName,"1.zip")

'/// Создаём класс создания ZIP файла
Set Zip = New ZipClass

'/// Открываем новый архив
Zip.CreateArchive DestFilePath
'/// Добавляем файл в архив
Zip.CopyFileToArchive SourceFilePath
'/// Закрываем архив
Zip.CloseArchive

MsgBox "Архив создан",vbInformation,"ZipClass"


'/// Код класса
Class ZipClass
        Private Shell

        Private FileSystemObject

        Private ArchiveFolder

        Private ItemsCount
       
        Private Sub Class_Initialize()
            Set Shell = CreateObject("Shell.Application")
            Set FileSystemObject = CreateObject("Scripting.FileSystemObject")
        End Sub

        Function CreateArchive(ZipArchivePath)

            If UCase(FileSystemObject.GetExtensionName(ZipArchivePath)) <> "ZIP" Then
                Exit Function
            End If
           
            Dim ZipFileHeader
           
            ZipFileHeader = "PK" & Chr(5) & Chr(6) & String(18, 0)
           
            FileSystemObject.OpenTextFile(ZipArchivePath, 2, True).Write ZipFileHeader
           
            Set ArchiveFolder = Shell.NameSpace(ZipArchivePath)
       
                if Not (ArchiveFolder is Nothing) Then CreateArchive = True
        End Function

        Function CopyFileToArchive(FilePath)
                if (ArchiveFolder is Nothing) Then Exit Function
            ArchiveFolder.CopyHere FilePath
                ItemsCount = ItemsCount + 1
        End Function

        Function CopyFolderToArchive(FolderPath)
                if (ArchiveFolder is Nothing) Then Exit Function
            ArchiveFolder.CopyHere FolderPath
                ItemsCount = ItemsCount + 1
        End Function

        Function CloseArchive
                if (ArchiveFolder is Nothing) Then Exit Function
                Set WsriptShell = CreateObject("Wscript.Shell")
      if IsObject(Wscript) Then
         Do
            Wscript.Sleep 100
                    Loop Until ArchiveFolder.Items.Count => ItemsCount
      Else
         ServerSleep
      End if
           ItemsCount = 0
        End Function

   Private Function ServerSleep
                Set WsriptShell = CreateObject("Wscript.Shell")
      Do
         WsriptShell.Popup "",1,""
                Loop Until ArchiveFolder.Items.Count => ItemsCount
   End Function

        Function MoveFileToArchive(FilePath)
                if (ArchiveFolder is Nothing) Then Exit Function
            ArchiveFolder.MoveHere FilePath
        End Function
End Class


ALX_2002
Мега гуру
Мега гуру
 
Сообщения: 2054
Зарегистрирован: 25.11.2002 (Пн) 20:03

Сообщение ALX_2002 » 24.12.2007 (Пн) 12:56

Во дела.... 61 просмотр и ни одного камента.... Напишите, хоть кто воспользовался ? Кому пригодилось ? :roll:

shady
Постоялец
Постоялец
 
Сообщения: 461
Зарегистрирован: 09.11.2005 (Ср) 11:03

Сообщение shady » 28.01.2008 (Пн) 14:16

А функции разархивирования не будет?

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Сообщение Денис » 28.01.2008 (Пн) 14:28

А эта... я не пойму, архивация производится средствами винды? Получается, на 98 этот код работать не будет?
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 28.01.2008 (Пн) 14:58

Не будет. На 2000 кажись тоже.
Лучший способ понять что-то самому — объяснить это другому.

kibernetics
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 945
Зарегистрирован: 03.05.2006 (Ср) 13:31
Откуда: Minsk

Сообщение kibernetics » 29.01.2008 (Вт) 10:30

мда,
шурег, шурег...
как в том анекдоте:
pkunzip.zip

ALX_2002
Мега гуру
Мега гуру
 
Сообщения: 2054
Зарегистрирован: 25.11.2002 (Пн) 20:03

Сообщение ALX_2002 » 29.01.2008 (Вт) 14:45

Ну и что, что не буит. Кстати на 2000 c NTFS думаю будет :)

А на 98 и IIS-ки нормальной не было. Ибо не фиг :)

Donald.tusk
Начинающий
Начинающий
 
Сообщения: 1
Зарегистрирован: 24.12.2014 (Ср) 0:31
Откуда: land

ZipClass Пример zip ки файлов без компонентов

Сообщение Donald.tusk » 12.01.2015 (Пн) 22:36

коллеги Подскажите пожалуйста, у кого есть опыт в этом направлении.

Есть задача - формировать ZIP-архив. Но имена файлов могут быть на русском языке, содержать пробелы, восклицательные знаки и прочую гадость.

Как посоветуете - вычищать все до транслита, или есть какие-то продвинутые решения?
.


Вернуться в ASP и VBScript

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

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

    TopList