Как прочитать содержимое файла.zip с помощью VBScript без фактического извлечения файлов?

У меня есть файл.zip, который начинается с родительского каталога. Мне нужно прочитать этот каталог из файла, затем поискать на моем HD, чтобы увидеть, существует ли это имя каталога. Если он существует, я удаляю его и заменяю его содержимым.zip-файла.

Все это я могу сделать, кроме чтения.zip без распаковки файла.

Размер файла.zip может превышать 2 ГБ, поэтому я хочу не разархивировать, затем прочитать каталог, а затем скопировать.

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

Код для распаковки файлов:

 Set objSA = CreateObject("Shell.Application")
 Set objSource = objSA.NameSpace(pathToZipFile).Items ()
 Set objTarget = objSA.NameSpace(extractTo)     

 objTarget.CopyHere objSource,4

4 ответа

Решение

Предполагая, что вы можете использовать внешнее приложение, попробуйте загрузить 7Zip, а затем ваш скрипт выполнит его с -l переключатель. Это должно дать вам некоторый вывод, который вы сможете каким-то образом проанализировать.

Пример из файла справки: 7z l archive.zip

Ты можешь использовать For Each на ваше objSource объект, например:

Dim objSA, objSource, item
Set objSA = CreateObject("Shell.Application")
Set objSource = objSA.NameSpace(pathToZipFile).Items ()
For Each item in objSource
    WScript.Echo item
Next 

Вот похожий вопрос по SO.
Как перечислить содержимое папки.zip в C#?

Я сам использовал эту библиотеку. Это хорошо работает, http://dotnetzip.codeplex.com/, есть даже пример дерева, который читает zip без извлечения.

Вам понадобятся библиотеки DLL на сервере, но я бы не сказал, что их нужно устанавливать.;)

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

Если вы просто пытаетесь избежать трудоемкой операции копирования данных, вы можете попробовать разархивировать во временный каталог, а затем использовать функцию "move". Перемещение, как правило, занимает меньше времени, чем копирование, поскольку фактически не перезаписывает данные на диск. Он просто обновляет файловую систему, чтобы указать, где находятся данные.

Другие вопросы по тегам