Как прочитать содержимое файла.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". Перемещение, как правило, занимает меньше времени, чем копирование, поскольку фактически не перезаписывает данные на диск. Он просто обновляет файловую систему, чтобы указать, где находятся данные.