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

У меня есть файл .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 ]

1 голос
/ 20 января 2011

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

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

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

0 голосов
/ 03 октября 2012

Вы можете использовать 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 
0 голосов
/ 20 января 2011

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

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

0 голосов
/ 19 января 2011

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

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

...