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

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

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

The .zip-файл может быть больше 2G по размеру, поэтому я хочу избежать распаковки, затем чтения dir, а затем копирования.

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

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

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

 objTarget.CopyHere objSource,4

4 ответов


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

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


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

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

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


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

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


можно использовать For Each на