объект, например:

я есть файл .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)

Вы можете использовать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 
Решение Вопроса

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

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

 ccwhite02 февр. 2011 г., 17:45
Я думаю, что я получил это в полу рабочее состояние. Все еще работаю над этим, но это кажется самым многообещающим


Как перечислить содержимое папки .zip в c #?

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

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

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

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

 ccwhite19 янв. 2011 г., 20:52
Все, что я пробовал, не работает. Проблема в том, что у меня может быть 10 .zip файлов (программных исправлений), которые нужно применять последовательно. Если исправляемая система уже имеет исправления 1-5, то мне не нужно тратить время на распаковку, проверку, удаление, попытку далее. В нынешнем виде это может быть тем, чем я в конечном итоге занимаюсь. Либо это, либо убедить клиента, что все в порядке, если пользователям нужно нажать кнопку, чтобы подтвердить перезапись.
 ccwhite02 февр. 2011 г., 17:44
Я хотел бы, чтобы это было так просто. Каждый патч имеет свой начальный каталог под zip, который часто не связан с реальным названием патча.
 Dave Turvey19 янв. 2011 г., 22:10
Не можете ли вы определить версию патча из имени файла zip? Просто назовите молнии чем-нибудь разумным.

Ваш ответ на вопрос