Windows API для распаковки zip-файлов? - PullRequest
5 голосов
/ 18 мая 2009

В Windows Explorer вы можете извлечь сжатую папку (zip-файл)

Существует ли API или командная строка для извлечения zip-файла с использованием того же метода программно?

Ответы [ 4 ]

5 голосов
/ 06 июня 2009

Вы можете использовать этот скрипт VBScript:

'Adapted from http://www.robvanderwoude.com/vbstech_files_zip.html

strFile = "c:\filename.zip"
strDest = "c:\files"

Set objFSO = CreateObject("Scripting.FileSystemObject")

If Not objFSO.FolderExists(strDest) Then
    objFSO.CreateFolder(strDest)
End If

UnZipFile strFile, strDest

Sub UnZipFile(strArchive, strDest)
    Set objApp = CreateObject( "Shell.Application" )

    Set objArchive = objApp.NameSpace(strArchive).Items()
    Set objDest = objApp.NameSpace(strDest)

    objDest.CopyHere objArchive
End Sub
2 голосов
/ 18 мая 2009
  1. Проверка Сжатие Zip-файлов с Windows Shell API и C #
  2. Вы можете использовать SharpZipLib , который бесплатно для проекта dot net.
0 голосов
/ 17 апреля 2017

Для пользователей C # или VB вы можете проверить ответ из MSDN: https://msdn.microsoft.com/en-us/library/ms404280(v=vs.100).aspx

Для .net 4.x вот пример кода из MSDN

using System;
using System.IO;
using System.IO.Compression;

namespace ConsoleApplication
{
    class Program
    {
        static void Main(string[] args)
        {
            string startPath = @"c:\example\start";
            string zipPath = @"c:\example\result.zip";
            string extractPath = @"c:\example\extract";

            ZipFile.CreateFromDirectory(startPath, zipPath);

            ZipFile.ExtractToDirectory(zipPath, extractPath);
        }
    }
}
0 голосов
/ 21 августа 2013

Я пробовал вышеупомянутую функцию Sub UnZipFile(...) в Excel 2010, и она не работала: ошибка времени выполнения '91' (переменная объекта или блок не установлен) в строке

Set objArchive = objApp.Namespace(strArchive).Items() 

и строка

Set objDest = objApp.Namespace(strDest)

молча также не работает: после выполнения objDest все равно ничто!

Microsoft .Namespace() принимает в качестве параметра объект, строковую константу или строковую переменную. Со строковыми переменными часто возникают подозрительные проблемы, требующие обхода:

Set objArchive = objApp.Namespace(**CStr(** strArchive **)**).Items()  
Set objDest = objApp.Namespace(**CStr(** strDest **)**)

или альтернативный обходной путь

Set objArchive = objApp.Namespace(**"" &** strArchive).Items()  
Set objDest = objApp.Namespace(**"" &** strDest)

И строка objDest.CopyHere objArchive также не работала: папка назначения оставалась пустой!

Вот версия, которая работает в Excel 2010 и, скорее всего, также в других средах:

Sub UnZipFile(strZipArchive As String, strDestFolder As String)
  Dim objApp As Object
  Dim vItem As Variant
  Dim objDest As Object

  Set objApp = CreateObject("Shell.Application")
  Set objDest = objApp.Namespace(CStr(strDestFolder))
  For Each vItem In objApp.Namespace(CStr(strZipArchive)).Items
    objDest.CopyHere vItem
  Next vItem
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...